Documentation Home
MySQL 连接器/J 8.0 开发人员指南  / 第 6 章连接器/J 参考  /  6.5 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, and 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 ResultSetMetaData.GetColumnTypeName() 和 ResultSetMetaData.GetColumnClassName() 的 MySQL 类型和返回值

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[]
ENUM('value1','value2',...) CHAR java.lang.String
SET('value1','value2',...) CHAR java.lang.String