希望这个问题不要太笼统。在网站或sql文档中找不到任何内容:
在编写代码时,我对其进行了测试,令我惊讶的是,它居然成功了:
SELECT * FROM cal_entry WHERE cal_entry.parent_id <> 'null'
它实际上显示的是没有带 NULL
价值观(这些是真实的 NULL
数据库中的值,而不是字符串 'null'
内部)。
根据文件,我应该用 NOT NULL
,当然。顺便说一句,它不适用于 = 'null'
,就像文档中正确说明的那样。
有人能解释一下吗?
4条答案
按热度按时间8yoxcaq71#
假设
parent_id
在一个int
列查询将返回所有非空、非零行:当比较数字和字符串时,mysql会将字符串转换为数字。一些例子:
'null'
变为0'asdf'
变为0'1asdf'
变成123
'1'
变为1您的查询将表现为:
332nm8kg2#
这个运算符给出的结果不等于。例如$var!=无效的。我们在mysql中编写为<>。这是一种验证,该值永远不应等于null。
5jvtdoz23#
使用null时,应始终注意以下两个语句-
表达式可以为null,但永远不能等于null。
两个空值永远不相等。
所以,在你的查询中,只要有比较
null<>null
第二个语句返回true。另外,请始终考虑某些行可能包含null-
此查询将省略包含空条目的行。改用-
uwopmtnx4#
您正在选择其中的所有行
<> 'null'
这是真的。将(等于或不等于)与null进行比较是null,因此如果一行
cal_entry.parent_id
如果为null,则您的条件将为false/null。因此,您的查询将获取所有不为null的行,也不包含字符串“null”。
(注意,你也可以写
<>'something_else'
)