Mysql中關於0值判斷的坑及解決
Mysql關於0值判斷的坑
最近遇到一個Mysql返回多值的問題,最後發現是mysql過濾條件中0值判斷的問題。
簡練問題如下
有個INT字段a,默認值為0,程序傳入的判斷條件是 a = 'abacd'。
傳入的是一個字符串,結果a=0的所有數據都返回瞭。
原因
mysql會在邏輯判斷時,如果是整型判斷,但是傳入的是字符串,如果字符串不是數字,則字符串會被轉換為0。所以,
這段代碼實際判斷的條件是 a = 0。
解決方式
mysql中的邏輯判斷,判斷值的傳入,應該與字段類型一致,整型判斷整型,字符串判斷字符串。如果避免不瞭,跨類型的判斷,那麼就需要根據業務邏輯,進行調整,避免掉入這個坑。
問題引申
如果字段a是否varchar類型,值為0,那麼判斷時應該用 a='0'判斷,而不是 a = 0 判斷,原因與上面的原因一致,字符串會被轉換為0,結果最終判斷的是 0 = 0。
Mysql判斷數值0誤區總結
mysql中判斷數據表字段是否為0,當前數據表字段為int類型時,沒有問題。若為char或者varchar類型時,則需要使用'0',顯而易見,字符串和整型是不能等同的。所以不要 犯這麼低級的錯誤。
以下是從網上搜索到的mysql搜索的原理:
mysql會把字段的值先轉成整數,然後再對比。
如果字段的第一位是字符串,那麼轉成整數就是0瞭,
一般對字符串的搜索都要加上引號。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- MySQL中varchar和char類型的區別
- 幾個MySQL高頻面試題的解答
- Java面試題沖刺第十三天–數據庫(3)
- 詳解Mysql和Oracle之間的誤區
- MySQL如何確定VARCHAR大小問題