今天遇到的问题:用jdbc存数据,打算存一个long类型。

找了一下发现mysql的字段没有long类型呀,于是就在java端将long强转成了int类型,结果发现long格式下好好的毫秒,转成int之后变成了莫名其妙的数据(其实就是溢出了)。

写个demo研究一下mysql中对应的数据类型。

一、java mysql数据类型对照

类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述
VARCHAR L+N VARCHAR java.lang.String 12
CHAR N CHAR java.lang.String 1
BLOB L+N BLOB java.lang.byte[] -4
TEXT 65535 VARCHAR java.lang.String -1
INTEGER 4 INTEGER UNSIGNED java.lang.Long 4
TINYINT 3 TINYINT UNSIGNED java.lang.Integer -6
SMALLINT 5 SMALLINT UNSIGNED java.lang.Integer 5
MEDIUMINT 8 MEDIUMINT UNSIGNED java.lang.Integer 4
BIT 1 BIT java.lang.Boolean -7
BIGINT 20 BIGINT UNSIGNED java.math.BigInteger -5
FLOAT 4+8 FLOAT java.lang.Float 7
DOUBLE 22 DOUBLE java.lang.Double 8
DECIMAL 11 DECIMAL java.math.BigDecimal 3
BOOLEAN 1 同TINYINT
ID 11 PK (INTEGER UNSIGNED) java.lang.Long 4
DATE 10 DATE java.sql.Date 91
TIME 8 TIME java.sql.Time 92
DATETIME 19 DATETIME java.sql.Timestamp 93
TIMESTAMP 19 TIMESTAMP java.sql.Timestamp 93
YEAR 4 YEAR java.sql.Date 91

对于bolb,一般用于对图片的数据库存储,原理是把图片打成二进制,然后进行的一种存储方式,在java中对应byte[]数组。

对于boolen类型,在mysql数据库中,个人认为用int类型代替较好(其实是一样的)。

二、解决方法

我把字段换了tinyblob类型,瞬间long型的数据也可以存了…

结果为:

三、总结

知道什么类型的数据对应什么数据库字段,在设计的时候特别重要,需要重点学习。

发表评论

电子邮件地址不会被公开。 必填项已用*标注