MySQL Connector/J能够方便地处理MySQL数据类型和Java数据类型之间的转换。一般来说,任何MySQL数据类型均可以被转换为java.lang.String类型,并且任何数字类型可以被转换成任意的Java数字类型,虽然在某些情况下会出现取舍、溢出或者精度丢失的情况。
ResultSet.getObject() 方法会使用MySQL和Java数据类型之间的类型转换,并遵照如下规则。
MySQL类型名称 返回的Java类型
BIT(1) java.lang.Boolean
BIT(>1) byte[]
TINYINT 如果tinyInt1isBit配置属性被设置成true并且存储大小为1时,那么转换成java.lang.Boolean,否则,转换为java.lang.Integer。
BOOL, BOOLEAN 等同于TINYINT(1)的情况,参照TINYINT的转换规则
SMALLINT java.lang.Integer
MEDIUMINT java.lang.Integer,如果是无符号数,java.lang.Long(C/J 3.1或者之前版本), java.lang.Integer (C/J 5.0或者之后版本)
INT, INTEGER java.lang.Integer,如果是无符号数,那么转换为java.lang.Long
BIGINT java.lang.Long, 如果是无符号数,转换为java.math.BigInteger
FLOAT java.lang.Float
DOUBLE java.lang.Double
DECIMAL java.math.BigDecimal
DATE java.sql.Date
DATETIME java.sql.Timestamp
TIMESTAMP java.sql.Timestamp
TIME java.sql.Time
YEAR 如果yearIsDateType配置属性被设置为false,那么返回的对象类型为java.sql.Short。如果设置为true,那么会返回java.sql.Date对象,并且日期被设置为1月1日午夜
CHAR java.lang.String,除非该列的字符集为BINARY,那么将返回byte[]
VARCHAR java.lang.String,除非该列的字符集为BINARY,那么将返回byte[]
BINARY byte[]
VARBINARY byte[]
TINYBLOB byte[]
TINYINT 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
从Connector/J 3.1.0开始,JDBC驱动程序能够遵照JDBC规范适时给出警告信息或者抛出DataTruncation异常,除非你通过使用jdbcCompliantTruncation属性来显式配置连接并将其设置为false。
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, DECIMAL, INTEGER, BIGINT | java.lang.String, java.lang.Short, java.lang.Integer, java.math.BigDecimaljava.lang.Long, java.lang.Double, |
DATE, TIME, DATETIME, TIMESTAMP | java.lang.String, java.sql.Date, java.sql.Timestamp |
ResultSet.getObject() 方法会使用MySQL和Java数据类型之间的类型转换,并遵照如下规则。
MySQL类型名称 返回的Java类型
BIT(1) java.lang.Boolean
BIT(>1) byte[]
TINYINT 如果tinyInt1isBit配置属性被设置成true并且存储大小为1时,那么转换成java.lang.Boolean,否则,转换为java.lang.Integer。
BOOL, BOOLEAN 等同于TINYINT(1)的情况,参照TINYINT的转换规则
SMALLINT java.lang.Integer
MEDIUMINT java.lang.Integer,如果是无符号数,java.lang.Long(C/J 3.1或者之前版本), java.lang.Integer (C/J 5.0或者之后版本)
INT, INTEGER java.lang.Integer,如果是无符号数,那么转换为java.lang.Long
BIGINT java.lang.Long, 如果是无符号数,转换为java.math.BigInteger
FLOAT java.lang.Float
DOUBLE java.lang.Double
DECIMAL java.math.BigDecimal
DATE java.sql.Date
DATETIME java.sql.Timestamp
TIMESTAMP java.sql.Timestamp
TIME java.sql.Time
YEAR 如果yearIsDateType配置属性被设置为false,那么返回的对象类型为java.sql.Short。如果设置为true,那么会返回java.sql.Date对象,并且日期被设置为1月1日午夜
CHAR java.lang.String,除非该列的字符集为BINARY,那么将返回byte[]
VARCHAR java.lang.String,除非该列的字符集为BINARY,那么将返回byte[]
BINARY byte[]
VARBINARY byte[]
TINYBLOB byte[]
TINYINT 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