当遇到tyint 生成转化bool 类型问题很恶心,记录一下解决方法
一、
TinyInt转换规则
JAVA数据类型 和 MYSQL的数据类型转换,要注意tinyInt 类型,且存储长度为1的情况。
MYSQL官方的JDBC文档定义转换规则如下:
MySQL Types to Java Types for ResultSet.getObject():
MySQL Type Name
Return value of
GetColumnClassName
Returned as Java Class
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.
翻译:
如果tinyInt1isBit =true(默认),且tinyInt存储长度为1 ,则转为java.lang.Boolean 。
否则转为java.lang.Integer。
()
注意 ,是ResultSet.getObject() 方法
修复方法
1、tinyInt(1) 只用来代表Boolean含义的字段,且0代表False,1代表True。如果要存储多个数值,则定义为tinyInt(N), N>1。例如 tinyInt(2)
2、JDBC的URL增加 tinyInt1isBit=false参数,注意参数名区分大小写,否则不生效
建议双管齐下,以防新人接手不知道这个规则误踩坑。
二、按官方建议的类型处理
本文讲述了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类型代替较好,对bit操作不是很方便,尤其是在具有web页面开发的项目中,表示0/1,对应java类型的Integer较好。
完结