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 |
如果 如果 如果 |
如果 如果 如果 |
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 |