我遇到了一个问题,当我试图选择某个列为NULL的行时,它返回一个空集。然而,当我在phpMyAdmin中查看该表时,它对大多数行显示为null。
我的查询看起来像这样:
SELECT pid FROM planets WHERE userid = NULL
每次都是空的。
很多地方说要确保它不被存储为“NULL”或“null”而不是实际值,还有一个地方说要尝试只查找一个空格(userid = ' '
),但这些都没有工作。有人建议不要使用MyISAM而使用innoDB,因为MyISAM在存储null时有问题。我把表切换到了innoDB,但现在我觉得问题可能是它实际上仍然不是null,因为它可能转换它的方式。我想这样做,而不必将表重新创建为innoDB或其他任何东西,但如果必须这样做,我当然可以尝试。
9条答案
按热度按时间jgzswidk1#
SQL NULL是特殊的,你必须执行
WHERE field IS NULL
,因为NULL不能等于任何值,包括自身(即:NULL = NULL始终为false)。
参见
Rule 3
https://en.wikipedia.org/wiki/Codd%27s_12_rulesdes4xlb02#
e5nszbig3#
既然大家都有了答案,我想再补充一点。我也遇到过同样的问题。
为什么你的查询失败了?你有
这不会给予您预期的结果,因为从mysql doc
在SQL中,NULL值与任何其他值(即使是NULL)相比永远不会为true。包含NULL的表达式总是产生NULL值,除非在表达式中涉及的运算符和函数的文档中另有说明。
强调我的。
若要搜索为
NULL
的列值,不能使用expr = NULL
测试。以下语句不返回行,因为expr = NULL
对于任何表达式都不为真溶液
要测试
NULL
,请使用IS NULL
和IS NOT NULL
运算符。NULL
。NULL
。lnlaulya4#
还有一个
<=>
操作符:<=>
也可以用于非NULL值:SELECT NULL <=> NULL
产生1
。SELECT 42 <=> 42
也产生1
。请参阅: www.example.com
yrefmtwq5#
来自http://w3schools.com/sql/sql_null_values.asp的信息:
1)NULL值表示缺少未知数据。
2)默认情况下,表列可以保存NULL值。
3)NULL值与其他值的处理方式不同
4)不可能比较NULL和0;它们不是等价的。
5)不可能使用比较运算符(例如=、〈或〈〉)来测试NULL值。
6)我们将不得不使用ISNULL和ISNOTNULL运算符
如果你的问题:
34gzjxbg6#
有相同的问题,其中查询:
未返回值。似乎是MyISAM的问题,对InnoDB中的数据进行相同的查询返回了预期的结果。
与:
返回所有预期结果。
wbrvyc0a7#
mqxuamgl8#
我在将数据库从Access转换为MySQL时遇到了同样的问题(使用 www.example.com 与数据库通信)。
我需要评估一个字段(字段类型varchar(1))是否为null。
这句话适用于我的场景:
8iwquhpp9#
用这个代码替换它就可以了
SELECT pid FROM planets WHERE userid IS NULL