Java、JDBC与MySQL数据类型对照数据类型之间的转换。MySQL Connector/J能够方便地处理MySQL数据类型和Java数据类型之间的转换。几乎所有的MySQL数据类型都能够被转换为java.lang.String类型,任何数字类型能够被转换成任意的Java数字类型,但要注意的是某些情况下会出现取舍、溢出或者精度丢失的错误情况。
自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.BigDecimal, java.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 |
如有需要请参考mysql官方的文档:http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-type-conversions.html。