我遇到了一个问题,当我尝试为某个列选择具有NULL的行时,它会返回一个空集 . 但是,当我在phpMyAdmin中查看表时,它对大多数行都显示为null .
我的查询看起来像这样:
SELECT pid FROM planets WHERE userid = NULL
每次都清空 .
许多地方说要确保它不是存储为"NULL"或"null"而不是实际值,并且有人说要尝试寻找一个空间( userid = ' '
),但这些都没有奏效 . 有人建议不要使用MyISAM并使用innoDB,因为MyISAM存储无效 . 我把表切换到innoDB,但现在我觉得问题可能是它仍然不喜欢这样做而不必重新创建表作为innoDB或其他任何东西,但如果我必须,我当然可以尝试 .
8 回答
还有一个
<=>
运算符:会工作 . 好消息是
<=>
也可以与非NULL值一起使用:SELECT NULL <=> NULL
收益1
.SELECT 42 <=> 42
也收益1
.看这里:https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_equal-to
将数据库从Access转换为MySQL(使用vb.net与数据库通信)时,我遇到了同样的问题 .
我需要评估字段(字段类型varchar(1))是否为空 .
这个陈述适用于我的场景:
SQL NULL特殊,你必须做
WHERE field IS NULL
,因为NULL不能等于任何东西,包括它自己(即:NULL = NULL总是假的) .
见
Rule 3
https://en.wikipedia.org/wiki/Codd%27s_12_rules有同样问题的地方查询:
没有返回值 . 似乎是MyISAM的一个问题,对InnoDB中的数据的相同查询返回了预期的结果 .
跟着:
返回所有预期结果 .
来自http://w3schools.com/sql/sql_null_values.asp的信息:
所以如果你的问题:
由于所有人都给出了答案,我想补充一点 . 我也面临同样的问题 .
为什么查询失败?你有,
这不会给你预期的结果,因为从mysql doc
强调我的 .
解决方案
要测试
NULL
,请使用IS NULL
和IS NOT NULL
运算符 .operator IS NULL测试值是否为
NULL
.operator IS NOT NULL测试值是否不是
NULL
.MySQL comparison operators