Mysql中關於0值判斷的坑

2021-08-23 14:04:06 字數 449 閱讀 1646

最近遇到乙個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中的ifnull 函式判斷空值

我們知道,在不同的資料庫引擎中,內建函式的實現 命名都是存在差異的,如果經常切換使用這幾個資料庫引擎的話,很容易會將這些函式弄混淆。比如說判斷空值的函式,在oracle中是nvl 函式 nvl2 函式,在sql server中是isnull 函式,這些函式都包含了當值為空值的時候將返回值替換成另乙個...

Shell 關於exit 0的那些坑

在 shell 程式設計中,需慎用 exit 0!首先必須弄清楚 exit 0 不是 return 0,區別在於 return 0 用於函式中,表示函式執行成功返回 0 而 exit 0 則代表你當前程式執行成功並且會直接退出當前所執行的指令碼或者程式,相反,return 1 一般表示函式執行失敗返...

關於檔案中的0D 0A

檔案一般分為文字檔案和二進位制檔案。如果你想乙個文字檔案中寫入乙個 n 文字檔案中會增加0x0d 0x0a兩個位元組 可以使用utraledit來檢視,記事本是看不出來的 如果你讀乙個文字檔案,一旦遇到0x0d 0x0a,遍會讀為乙個 n 0x0a 而在windows的二進位制檔案中,你寫入什麼就是...