在項目中使用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