Mysql 在字串欄位比對上, 有個奇妙的狀況. 當然, 在正常一般狀況下不太容易發生.
某欄位 f1 為 varchar 或 char , 而在 where 條件下, 使用了
where f1=’sometext’
這樣沒有問題.
但若是使用了
where f1=0
會發生什麼事呢? 結果是全部成立.
根據 f1=0 來看, mysql 會先將 f1 欄位轉為數字, 而將字串轉為數字, 在 mysql 中, 會是 0 的結果, 導致會全部成立. 檢查以下語法:
SELECT cast( 'test string' AS SIGNED )
結果會是 0 , 也就解開了這個問題.
另外可以參考一下 cast 的語法:
http://dev.mysql.com/doc/refman/5.6/en/cast-functions.html
其 case ( data as type ) 中的 type, 可以為以下幾種:
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL[(M[,D])]
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]
供各位在不小心, 使用了等於零在判斷條件時, 發生問題的參考.