文档首页
MySQL Connector/J 开发者指南
相关文档 下载本手册
PDF (US Ltr) - 1.2Mb
PDF (A4) - 1.2Mb


MySQL Connector/J 开发者指南  /  Connector/J 参考  /  Java、JDBC 和 MySQL 类型

6.5 Java、JDBC 和 MySQL 类型

MySQL Connector/J 在处理 MySQL 数据类型和 Java 数据类型之间的转换方面非常灵活。

通常,任何 MySQL 数据类型都可以转换为 java.lang.String,任何数字类型都可以转换为任何 Java 数字类型,尽管可能会发生舍入、溢出或精度损失。

Connector/J 会根据 JDBC 规范的要求发出警告或抛出 DataTruncation 异常,除非连接已配置为不这样做,方法是使用属性 jdbcCompliantTruncation 并将其设置为 false

下表列出了始终保证有效的转换。第一列列出一个或多个 MySQL 数据类型,第二列列出一个或多个可以将 MySQL 类型转换到的 Java 类型。

表 6.19 MySQL 和 Java 数据类型之间可能的转换

这些 MySQL 数据类型 始终可以转换为这些 Java 类型
CHAR、VARCHAR、BLOB、TEXT、ENUM 和 SET java.lang.String、java.io.InputStream、java.io.Reader、java.sql.Blob、java.sql.Clob
FLOAT、REAL、DOUBLE PRECISION、NUMERIC、DECIMAL、TINYINT、SMALLINT、MEDIUMINT、INTEGER、BIGINT java.lang.String、java.lang.Short、java.lang.Integer、java.lang.Long、java.lang.Double、java.math.BigDecimal
DATE、TIME、DATETIME、TIMESTAMP java.lang.String、java.sql.Date、java.sql.Timestamp

注意

如果选择的 Java 数字数据类型的精度或容量低于要转换的 MySQL 数据类型,则可能会发生舍入、溢出或精度损失。

ResultSet.getObject() 方法使用 MySQL 和 Java 类型之间的类型转换,并在适当时遵循 JDBC 规范。ResultSetMetaData.GetColumnTypeName()ResultSetMetaData.GetColumnClassName() 返回的值如下表所示。有关 JDBC 类型的更多信息,请参阅 java.sql.Types 类的参考。

表 6.20 MySQL 类型以及 ResultSetMetaData.GetColumnTypeName() 和 ResultSetMetaData.GetColumnClassName() 的返回值

MySQL 类型名称 GetColumnTypeName 的返回值 GetColumnClassName 的返回值
BIT(1) BIT java.lang.Boolean
BIT( > 1) BIT byte[]
TINYINT(1) SIGNED, BOOLEAN

如果 tinyInt1isBit=truetransformedBitIsBoolean=falseBIT

如果 tinyInt1isBit=truetransformedBitIsBoolean=true: BOOLEAN

如果 tinyInt1isBit=falseTINYINT

如果 tinyInt1isBit=truetransformedBitIsBoolean=false java.lang.Boolean

如果 tinyInt1isBit=truetransformedBitIsBoolean=true java.lang.Boolean

如果 tinyInt1isBit=falsejava.lang.Integer

TINYINT( > 1) SIGNED TINYINT java.lang.Integer
TINYINT( any ) UNSIGNED TINYINT UNSIGNED java.lang.Integer
SMALLINT[(M)] [UNSIGNED] SMALLINT [UNSIGNED] java.lang.Integer(无论是否是 UNSIGNED
MEDIUMINT[(M)] [UNSIGNED] MEDIUMINT [UNSIGNED] java.lang.Integer(无论是否是 UNSIGNED
INT,INTEGER[(M)] INTEGER java.lang.Integer
INT,INTEGER[(M)] UNSIGNED INTEGER UNSIGNED java.lang.Long
BIGINT[(M)] BIGINT java.lang.Long
BIGINT[(M)] UNSIGNED BIGINT UNSIGNED java.math.BigInteger
FLOAT[(M,D)] FLOAT java.lang.Float
DOUBLE[(M,B)] [UNSIGNED] DOUBLE java.lang.Double(无论是否是 UNSIGNED
DECIMAL[(M[,D])] [UNSIGNED] DECIMAL java.math.BigDecimal(无论是否是 UNSIGNED
DATE DATE java.sql.Date
DATETIME DATETIME java.time.LocalDateTime
TIMESTAMP[(M)] TIMESTAMP java.sql.Timestamp
TIME TIME java.sql.Time
YEAR[(2|4)] YEAR 如果 yearIsDateType 配置属性设置为 false,则返回的对象类型为 java.sql.Short。如果设置为 true(默认值),则返回的对象类型为 java.sql.Date
CHAR(M) CHAR java.lang.String
VARCHAR(M) VARCHAR java.lang.String
BINARY(M)CHAR(M) BINARY BINARY byte[]
VARBINARY(M)VARCHAR(M) BINARY VARBINARY byte[]
BLOB BLOB byte[]
TINYBLOB TINYBLOB byte[]
MEDIUMBLOB MEDIUMBLOB byte[]
LONGBLOB LONGBLOB byte[]
TEXT TEXT java.lang.String
TINYTEXT TINYTEXT java.lang.String
MEDIUMTEXT MEDIUMTEXT java.lang.String
LONGTEXT LONGTEXT java.lang.String
JSON JSON java.lang.String
GEOMETRY GEOMETRY byte[]
VECTOR(M)(仅在 MySQL 企业版提供时受支持) VECTOR byte[]
ENUM('value1','value2',...) CHAR java.lang.String
SET('value1','value2',...) CHAR java.lang.String