2015-10-12 35 views
3

滑稽的結果,我有一個表定義爲TINYINT值的列(mail_flag)= 0與MySQL comparsion

當我設置SQL語句:select * from table where mail_flag = "r"我得到的所有行作爲結果。其實我期待一個空洞的結果。有沒有人有解釋?

回答

5

如果您將一個數字(本例中爲tinyint)與一個字符MySQL will attempt to convert the character to a number.進行比較,更糟糕的是,它會在遇到的第一個非數字字符處截斷字符串。在這裏,由於沒有數字字符,因此該字符串將被視爲0,當然,0等於0

爲了得到一個合理的結果,你應該強制MySQL投數爲字符串,而不是默認的鑄造:

SELECT * 
FROM mytable 
WHERE CAST(mail_flag AS CHAR(1)) = 'r'