Truncated incorrect DOUBLE value: 'test'

程序跑起來測試功能的時候,後臺報了一個錯誤Truncated incorrect DOUBLE value: ‘test’。拿sql去數據庫執行,可以正常運行。

就是下面這個很簡單的update語句:

update epn_manage_userversion set force_update_ver='1.0' where userid =100037001

可以看出語法不存在問題的。

排查問題後發現是髒數據引起的問題:
userid字段是varchar類型的,數據庫中有一條數據的userid=‘test’
而java代碼中的sql是userid=100037001
一個是數據類型,一個是字符類型,當執行sql掃描到userid=‘test’這條數據自然就報錯了。

那麼爲什麼在數據庫中執行時正常的呢?
應該是工具原因,我使用的是navicat,數據庫是mysql
navicat估計是把userid=100037001轉換成了userid=‘100037001’
所以執行的時候都是字符類型,不存在問題。

解決方式是:
在java代碼中拼接sql時userid的值加上單引號

sb.append("userid='"+userid+"'");

可能看到這裏,也不知道我在說什麼,我總結一下遇到這種錯誤的解決方法,或許會有幫助。

1.在代碼中給字段的值加上單引號,讓值變成字符型的(查詢時字段值加單引號也會提升查詢效率的)
2.檢查sql中的數據類型和數據庫中的字段類型是否相符

有更好的解決方案歡迎討論。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章