有趣的结果与mysql comparsion

时间:2015-10-12 22:54:05

标签: mysql sql select

我有一个列(mail_flag)定义为tinyint value = 0

的表

当我设置sql语句时:select * from table where mail_flag = "r"我得到所有行作为结果。实际上我期待一个空洞的结果。有没有人解释?

1 个答案:

答案 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'