1. 程式人生 > >Truncated incorrect DOUBLE value: 'test'

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中的資料型別和資料庫中的欄位型別是否相符

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