解决jdbcTemplate和jpa查询TINYINT(1)返回BOOLEAN的问题

问题背景

在项目中使用jpa和jdbcTemplate时,发现当对Tinyint类型的数据进行查询时,会被看成boolean类型返回。
而在项目中,咱们使用了大量的Tinyint来作枚举值,被看成布尔类型返回后,形成了程序的异常。html

status TINYINT(1) NOT NULL DEFAULT 0;

分析

在mysql的官网 numeric-type-overview 这篇文档里面写到mysql

BOOL, BOOLEAN

These types are synonyms for TINYINT(1). A value of zero is considered false. Nonzero values are considered truesql

也就是说,在mysql中对 TINYINT(1) 和 BOOLEAN 的处理是同样的。app

解决

查了很多文档,都是对 jpa 或者 jdbcTemplate的查询方法进行扩展,在返回的数据进行Mapper匹配时,判断若是是TINYINT类型,就做特殊处理。
虽然这样能解决问题,但像这样广泛的问题,我相信mysql确定有过考虑,而后在mysql的官方文档里面发现了这个配置ide

The data type returned for TINYINT(1) columns when tinyInt1isBit=true (the default) can be switched between Types.BOOLEAN and Types.BIT using the new configuration property transformedBitIsBoolean

也就是说,当你对mysql Connector设置了tinyInt1isBit=true后,它会将TINYINT(1)看成BIT也就是
Types.BOOLEAN来处理。并且这个设置是默认开启的。那是否是设置为false后反过来呢?url

因而在jdbc url后面添加了?tinyInt1isBit=true,问题解决spa

相关文章
相关标签/搜索