美文网首页大数据 爬虫Python AI Sql程序员
Java、JDBC与MySQL数据类型对照数据类型之间的转换

Java、JDBC与MySQL数据类型对照数据类型之间的转换

作者: 宋鎏鑫 | 来源:发表于2017-01-24 14:40 被阅读0次

开头唠嗑

前几天在设计数据库时偶然发现mysql还有tinyint 型的字段,百度之后知道了

TINYINT ,字段类型,如果设置为UNSIGNED类型,只能存储从0到255的整数,不能用来储存负数
TINYINT 型的字段如果不设置UNSIGNED类型,存储-128到127的整数。

因此我发现用1个tinyint型数据只占用一个字节;一个INT型数据占用四个字节。这看起来似乎差别不大,但是在比较大的表中,字节数的增长是很快的。这个数据类型也确实能为我们节省一定存储空间。
看着不错我决定用它来存储成绩,感觉大小刚刚好,那么他在java中又对应什么类型呢?反正寒假在家除了敲代码也没有什么乐趣了拍照摄影?外面雾霾大,在家吧,索性把他们之间的关系理理。

官方的关系对应表

引自mysql.com-- Java, JDBC and MySQL Types

MySQL类型名 返回值 GetColumnClassName 返回的Java类型
BIT(1) (new in MySQL-5.0) BIT java.lang.Boolean
BIT( > 1) (new in MySQL-5.0) BIT byte[]
TINYINT TINYINT java.lang.Boolean if the configuration property tinyInt1isBit is set to true (the default) and the storage size is 1, or java.lang.Integer if not.
BOOL, BOOLEAN TINYINT See TINYINT, above as these are aliases for TINYINT(1), currently.
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)] [UNSIGNED] INTEGER [UNSIGNED] java.lang.Integer, if UNSIGNED java.lang.Long
BIGINT[(M)] [UNSIGNED] BIGINT [UNSIGNED] java.lang.Long, if UNSIGNED java.math.BigInteger
FLOAT[(M,D)] FLOAT java.lang.Float
DOUBLE[(M,B)] DOUBLE java.lang.Double
DECIMAL[(M[,D])] DECIMAL java.math.BigDecimal
DATE DATE java.sql.Date
DATETIME DATETIME java.sql.Timestamp
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.Datewith the date set to January 1st, at midnight.
CHAR(M) CHAR java.lang.String (unless the character set for the column is BINARY, then byte[] is returned.
VARCHAR(M) [BINARY] VARCHAR java.lang.String (unless the character set for the column is BINARY, then byte[] is returned.
BINARY(M) BINARY byte[]
VARBINARY(M) VARBINARY byte[]
TINYBLOB TINYBLOB byte[]
TINYTEXT VARCHAR java.lang.String
BLOB BLOB byte[]
TEXT VARCHAR java.lang.String
MEDIUMBLOB MEDIUMBLOB byte[]
MEDIUMTEXT VARCHAR java.lang.String
LONGBLOB LONGBLOB byte[]
LONGTEXT VARCHAR java.lang.String
ENUM('value1','value2',...) CHAR java.lang.String
SET('value1','value2',...) CHAR java.lang.String

跨类型转换

下图展示了MySQL JDBC允许的跨类型相互转换。

这些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
DATE, TIME, DATETIME, TIMESTAMP java.lang.String, java.sql.Date, java.sql.Timestamp

注意

如果选择的Java数值数据类型的精度或容量低于要转换/来自的MySQL数据类型,则可能会出现舍入,溢出或精度丢失。

MySQL Connector / J在处理MySQL数据类型和Java数据类型之间的转换方式方面是灵活的。

在一般情况下,任何MySQL数据类型可以转换为一个 java.lang.String,任何数值类型可以转换为任意的Java数字类型的,虽然可能会出现舍入,溢出或精度损失。

参考建议

Java, JDBC and MySQL Types
Mybatis源代码分析之类型转换

相关文章

网友评论

    本文标题:Java、JDBC与MySQL数据类型对照数据类型之间的转换

    本文链接:https://www.haomeiwen.com/subject/qtpzbttx.html