問題場景
在最近這幾天用logstash將mysql中的數據導入的elasticsearch時,發現數據庫中的tinyint(1)這種類型的就會被轉成布爾型,這把我給氣的。在網上找了一圈,才找到問題的根源。
原因探索
原來是jdbc裏面將這種tinyint(1)處理成布爾型的了。tinyint(2)以上的就不會處理。
解決方案
網上有說在查詢結果中將這種字段乘以1然後作爲源數據使用,但是有的時候,我們是用*號全部查詢出來,爲了其中個別的字段去將全部字段都一一寫出來,實在是心累啊。所以最後查詢來查詢去,找到了java中對這種的處理辦法。就是在連接數據庫的時候,指定這種不處理。就是在連接字符串後面指定tinyInt1isBit=false
代碼如下:
jdbc_connection_string => "jdbc:mysql://localhost:3306/my_db?tinyInt1isBit=false"
這樣導入之後的tinytint完整保留字段類型。解決了我的困擾。