解決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

相關文章
相關標籤/搜索