mysql 数据库 tinyint 类型字段取数变成 true/false 的解决方案

 

问题描述:

在 mysql 数据库设定上,有个字段类型是 tinyint 类型,长度为 1,
设定如下所示:

imagepng

常规 sql 取数,
取到润乾报表内的时候,这个字段数据变成了 true/false

imagepng

如果 tinyint 长度设置成 1,查出来是 true/false

问题分析

MySQL 官方的 JDBC 文档定义转换规则如下:

imagepng
如果 tinyInt1isBit=true(默认),且 tinyInt 存储长度为 1,则转为 java.lang.Boolean,否则转为 java.lang.Integer。

解决方案

1、避免使用长度为 1 的 tinyint 类型字段存储数字格式的数据,tinyInt(1) 只用来代表 Boolean 含义的字段。其中 0 代表 False,1 代表 True。如果要存储多个数值,则定义为 tinyInt(N), N>1。例如 tinyInt(2)

2、JDBC 的 URL 增加 tinyInt1isBit=false 参数,注意参数名区分大小写,否则不生效。

final private val URL = “jdbc:mysql://localhost:3306/test_db?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useSSL=true

conn_str=“jdbc:mysql://${hostname}/${db_name}?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useSSL=true&dontTrackOpenResources=true&defaultFetchSize=10000&useCursorFetch=true