当遇到tyint 生成转化bool 类型问题很恶心,记录一下解决方法
一、
TinyInt转换规则
JAVA数据类型 和 MYSQL的数据类型转换,要注意tinyInt 类型,且存储长度为1的情况。
MYSQL官方的JDBC文档定义转换规则如下:
MySQL Types to Java Types for ResultSet.getObject():
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() 方法
参考文档:https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-type-conversions.html
修复方法
1、tinyInt(1) 只用来代表Boolean含义的字段,且0代表False,1代表True。如果要存储多个数值,则定义为tinyInt(N), N>1。例如 tinyInt(2)
2、JDBC的URL增加 tinyInt1isBit=false参数,注意参数名区分大小写,否则不生效
jdbc:mysql://${ucmha.proxy1_2.host}/${db.mysql.db}?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较好。
完结
|