有趣的结果与mysql comparsion

rat*_*wer 3 mysql sql select

我有一个列(mail_flag)定义为tinyint值= 0的表

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

Mur*_*nik 5

如果您将一个数字(tinyint在这种情况下)与一个字符进行比较,MySQL将尝试将该字符转换为数字.更糟糕的是,它会在遇到的第一个非数字字符处截断字符串.在这里,因为你没有数字字符,所以字符串被视为a 0,当然,0它等于0.

为了获得合理的结果,您应该强制MySQL将数字转换为字符串,而不是默认的转换:

SELECT *
FROM   mytable
WHERE  CAST(mail_flag AS CHAR(1)) = 'r'
Run Code Online (Sandbox Code Playgroud)