最近遇到一個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中,當資料表欄位為int型別時,可以判斷該欄位是否為0,不會出現問題。若為char或varchar型別時,則需使用'0',顯而易見,字串和整數是不能等同的。所以不要 犯這麼低級的錯誤。
以下是從網路上搜尋到的mysql搜尋的原理:
#mysql會把欄位的值先轉成整數,然後再比較。
如果欄位的第一位是字串,那麼轉成整數就是0了,
一般對字串的搜尋都要加上引號。
以上是Mysql中關於0值判斷的坑怎麼解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!