26.3.3.3. Java,JDBC和MySQL类型
MySQL Connector/J在处理MySQL数据类型和Java数据类型的转换处理方面十分灵活。
尽管可能会出现舍入、溢出或精度损失,当在通常情况下,能够将任何MySQL数据类型转换为java.lang.String,并能将任何数值类型转换为Java数值类型。
从Connector/J 3.1.0开始,按照JDBC规范的要求,JDBC驱动程序将发出警告或抛出DataTruncation异常,除非通过使用“jdbcCompliantTruncation”属性并将其设为“假”,对连接进行相应配置取消了前述要求。
在下面的表格中,列出能可靠工作的转换:
表26.2. 转换表
下述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 注释:与希望转换的MySQL数据类型相比,如果选择了精度较低的Java数值类型,可能会出现舍入、溢出或精度损失。 |
DATE, TIME, DATETIME, TIMESTAMP | java.lang.String, java.sql.Date, java.sql.Timestamp |
在MySQL类型和Java类型之间,ResultSet.getObject()方法采用了下述类型转换方式,在可能的情况下遵从JDBC规范:
表26.3. 用于ResultSet.getObject()的MySQL类型和Java类型
MySQL类型名称 | 以Java类返回 |
BIT(1) (new in MySQL-5.0) | java.lang.Boolean |
BIT( > 1) (new in MySQL-5.0) | byte[] |
TINYINT | java.lang.Boolean,如果将配置属性“tinyInt1isBit”设为“真”(默认值),并将存储大小设为“1”;或java.lang.Integer,如果不是的话。 |
BOOL , BOOLEAN | 请参见上面的TINYINT,它们目前是TINYINT(1)的别名。 |
SMALLINT[(M)] [UNSIGNED] | java.lang.Integer(无论是否为UNSIGNED) |
MEDIUMINT[(M)] [UNSIGNED] | java.lang.Integer(无论是否为UNSIGNED) |
INT,INTEGER[(M)] [UNSIGNED] | java.lang.Integer,如果是UNSIGNED,java.lang.Long |
BIGINT[(M)] [UNSIGNED] | java.lang.Long,如果是UNSIGNED,java.math.BigInteger |
FLOAT[(M,D)] | java.lang.Float |
DOUBLE[(M,B)] | java.lang.Double |
DECIMAL[(M[,D])] | java.math.BigDecimal |
DATE | java.sql.Date |
DATETIME | java.sql.Timestamp |
TIMESTAMP[(M)] | java.sql.Timestamp |
TIME | java.sql.Time |
YEAR[(2|4)] | java.sql.Date(日期设为2月1日晚上2点) |
CHAR(M) | java.lang.String(除非列的字符集是BINARY),然后返回字节[] |
VARCHAR(M) [BINARY] | java.lang.String(除非列的字符集是BINARY),然后返回字节[] |
BINARY(M) | byte[] |
VARBINARY(M) | byte[] |
TINYBLOB | byte[] |
TINYTEXT | java.lang.String |
BLOB | byte[] |
TEXT | java.lang.String |
MEDIUMBLOB | byte[] |
MEDIUMTEXT | java.lang.String |
LONGBLOB | byte[] |
LONGTEXT | java.lang.String |
ENUM('value1','value2',...) | java.lang.String |
SET('value1','value2',...) | java.lang.String |