MySQL Connector/J 在处理 MySQL 数据类型和 Java 数据类型之间的转换方面非常灵活。
通常,任何 MySQL 数据类型都可以转换为 java.lang.String,任何数字类型都可以转换为任何 Java 数字类型,尽管可能会出现舍入、溢出或精度损失。
Connector/J 按照 JDBC 规范的要求发出警告或抛出DataTruncation异常,除非通过使用连接属性jdbcCompliantTruncation并将其设置为 false将禁用上述行为。
下表列出了始终保证有效的转换。第一列列出了一种或多种 MySQL 数据类型,第二列列出了一种或多种 MySQL 类型可以转换为的 Java 类型。
Table 6.19 Possible Conversions Between MySQL and Java Data Types
These MySQL Data Types | Can always be converted to these Java types |
---|---|
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类的参考资料 。
Table 6.20 MySQL Types and Return Values for ResultSetMetaData.GetColumnTypeName()and ResultSetMetaData.GetColumnClassName()
MySQL Type Name | Return value of GetColumnTypeName | Return value of GetColumnClassName |
---|---|---|
BIT(1) | BIT | java.lang.Boolean |
BIT( > 1) | BIT | byte[] |
TINYINT(1) SIGNED, BOOLEAN | If tinyInt1isBit=true and transformedBitIsBoolean=false: BITIf tinyInt1isBit=true and transformedBitIsBoolean=true: BOOLEANIf tinyInt1isBit=false: TINYINT | If tinyInt1isBit=true and transformedBitIsBoolean=false: java.lang.BooleanIf tinyInt1isBit=true and transformedBitIsBoolean=true: java.lang.BooleanIf tinyInt1isBit=false: java.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 (regardless of whether it is UNSIGNED or not) |
MEDIUMINT[(M)] [UNSIGNED] | MEDIUMINT [UNSIGNED] | java.lang.Integer (regardless of whether it is UNSIGNED or not) |
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 (regardless of whether it is UNSIGNED or not) |
DECIMAL[(M[,D])] [UNSIGNED] | DECIMAL | java.math.BigDecimal (regardless of whether it is UNSIGNED or not) |
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 | If yearIsDateType configuration property is set to false, then the returned object type is java.sql.Short. If set to true (the default), then the returned object is of type 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 |