在项目中使用jpa和jdbcTemplate时,发现当对Tinyint类型的数据进行查询时,会被看成boolean类型返回。
而在项目中,咱们使用了大量的Tinyint来作枚举值,被看成布尔类型返回后,形成了程序的异常。html
status TINYINT(1) NOT NULL DEFAULT 0;
在mysql的官网 numeric-type-overview 这篇文档里面写到mysql
BOOL, BOOLEANThese 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