我有一个列(mail_flag)定义为tinyint value = 0
的表当我设置sql语句时:select * from table where mail_flag = "r"
我得到所有行作为结果。实际上我期待一个空洞的结果。有没有人解释?
答案 0 :(得分: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'