首页 > 解决方案 > Mysql vrachar 字段检查为零失败

问题描述

我有一个 varchar 字段状态,其值为“新”、“关闭”等

当我尝试 sqlselect * from table where status=0

它返回的结果有状态。它不返回状态 null 。

它在 status =1 上没有返回任何结果。

知道为什么此0检查在 varchar 上失败吗? status='0'正常工作

标签: mysqlmariadb

解决方案


如果我理解正确,您希望获取所有行,status=Null 所以您应该这样做:

SELECT * FROM table where status is Null;

您可以在此处查看:http ://www.mysqltutorial.org/tryit/例如在表订单上:

SELECT * FROM orders where comments is Null;

或者如果你想要你应该使用的相反

SELECT * FROM orders where comments is not Null;

一般来说,您不应将 varchar 字段与数字(如 0 或 1)进行比较

编辑:

为什么你认为这是错误的?它与您想象的不同,请参阅:https ://dev.mysql.com/doc/refman/8.0/en/type-conversion.html - mysql 非常努力地转换和比较您在查询中给出的内容。

因此,从您的示例中,如果您有一些状态为“1”的行,那么您的查询将导致该行,正如该链接中的引用所说:

有许多不同的字符串可以转换为值 1,例如“1”、“1”或“1a”)。


推荐阅读