我有一个问题,当我试图选择有一个NULL为某列的行,它返回一个空集。然而,当我在phpMyAdmin中查看表时,它对大多数行表示为空。
我的问题是这样的:
SELECT pid FROM planets WHERE userid = NULL
每次都是空集。
A lot of places said to make sure it's not stored as "NULL" or "null" instead of an actual value, and one said to try looking for just a space (userid = ' ') but none of these have worked. There was a suggestion to not use MyISAM and use innoDB because MyISAM has trouble storing null. I switched the table to innoDB but now I feel like the problem may be that it still isn't actually null because of the way it might convert it. I'd like to do this without having to recreate the table as innoDB or anything else, but if I have to, I can certainly try that.
既然已经给出了答案,我想再补充一点。我也遇到过同样的问题。
为什么你的查询失败了?你有,
SELECT pid FROM planets WHERE userid = NULL;
这不会给你预期的结果,因为从mysql文档
在SQL中,NULL值与任何其他值相比,即使是NULL值,也永远不为真。包含NULL的表达式总是产生一个NULL值,除非在文档中为表达式中涉及的操作符和函数另有说明。
我特别强调。
要搜索为NULL的列值,不能使用expr = NULL测试。下面的语句不返回任何行,因为expr = NULL对于任何表达式都不为真
解决方案
SELECT pid FROM planets WHERE userid IS NULL;
要测试NULL,请使用IS NULL和IS NOT NULL操作符。
operator IS NULL测试一个值是否为NULL。
operator IS NOT NULL测试一个值是否不是NULL。
MySQL比较操作符
既然已经给出了答案,我想再补充一点。我也遇到过同样的问题。
为什么你的查询失败了?你有,
SELECT pid FROM planets WHERE userid = NULL;
这不会给你预期的结果,因为从mysql文档
在SQL中,NULL值与任何其他值相比,即使是NULL值,也永远不为真。包含NULL的表达式总是产生一个NULL值,除非在文档中为表达式中涉及的操作符和函数另有说明。
我特别强调。
要搜索为NULL的列值,不能使用expr = NULL测试。下面的语句不返回任何行,因为expr = NULL对于任何表达式都不为真
解决方案
SELECT pid FROM planets WHERE userid IS NULL;
要测试NULL,请使用IS NULL和IS NOT NULL操作符。
operator IS NULL测试一个值是否为NULL。
operator IS NOT NULL测试一个值是否不是NULL。
MySQL比较操作符