我有一个表,其中一列 (mail_flag) 定义为 tinyint 值 = 0
当我设置 sql 语句时:select * from table where mail_flag = "r"
我得到所有行作为结果。其实我期待一个空的结果。有没有人解释一下?
最佳答案
如果您将一个数字(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'
关于mysql - 与 mysql 比较的有趣结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33091486/