mysql - Mysql vrachar 字段检查为零失败
问题描述
我有一个 varchar 字段状态,其值为“新”、“关闭”等
当我尝试 sqlselect * from table where status=0
它返回的结果有状态。它不返回状态 null 。
它在 status =1 上没有返回任何结果。
知道为什么此0
检查在 varchar 上失败吗? status='0'
正常工作
解决方案
如果我理解正确,您希望获取所有行,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”)。
推荐阅读
- javascript - 在这种情况下,javascript 如何确定 `this`?
- vue.js - v-date-picker 未在指定日期打开
- github - 自从在 Windows 上使用 Github Desktop 后,我的 Github 个人资料图片发生了变化?
- python - Pyrebase 上传的图像未加载 Firebase 存储
- reactjs - 我在 src 文件夹中有我的组件文件夹。我想导入文件 MyApp. 该怎么办?
- azure - 将 Azure Bot 项目添加到已包含 Web 应用程序的解决方案
- android - 在 ScrollView 中时,android 上的可滚动子项不可滚动
- r - R:如果其中一列具有特定值,如何标记主题
- c# - 没有注册类型“IServiceProviderFactory[Autofac.ContainerBuilder]”的服务
- javascript - 函数的意外结果