MySQL:select列为空的行
我遇到了一个问题,当我尝试select具有某个列的NULL的行时,它将返回一个空集。 但是,当我在phpMyAdmin中查看表格时,大多数行都显示为空。
我的查询看起来像这样:
SELECT pid FROM planets WHERE userid = NULL
空集每一次。
很多地方说,以确保它不存储为“NULL”或“空”而不是实际值,一个说试图寻找一个空间( userid = ' '
),但没有一个工作。 有一个build议,不要使用MyISAM和使用innoDB,因为MyISAM存储空问题。 我把表切换到innoDB,但现在我觉得问题可能是它仍然不是实际为空,因为它可能会转换它。 我想这样做,而不必重新创build表作为innoDB或其他任何东西,但如果我必须,我当然可以尝试。
SQL NULL的特殊,你必须做WHERE field IS NULL
,因为NULL不能等于任何东西,
包括它本身(即:NULL = NULL总是为false)。
SELECT pid FROM planets WHERE userid IS NULL
由于所有的答案我想补充一点。 我也面临同样的问题。
为什么你的查询失败? 你有,
SELECT pid FROM planets WHERE userid = NULL;
这不会给你预期的结果,因为从MySQL文档
在SQL中, 与任何其他值(即使为NULL)相比 , NULL值都不会为真。 除非expression式中涉及的运算符和函数的文档中另有说明,否则包含NULL的expression式总是产生NULL值。
强调我的。
要search
NULL
值的列值,您不能使用expr = NULL
testing。 以下语句不返回任何行,因为对于任何expression式 ,expr = NULL
从不为真
解
SELECT pid FROM planets WHERE userid IS NULL;
要testingNULL
,请使用IS NULL
和IS NOT NULL
运算符。
- 运算符IS NULLtesting值是否为
NULL
。 - 运算符IS NOT NULLtesting值是否不为
NULL
。 - MySQL比较运算符
来自http://w3schools.com/sql/sql_null_values.asp的信息:;
1)NULL值表示丢失的未知数据。
2)默认情况下,表列可以保存NULL值。
3)NULL值与其他值的处理方式不同
4)不可能比较NULL和0; 他们不相同。
5)使用比较运算符(例如=,<或<>)来testingNULL值是不可能的。
6)我们将不得不使用IS NULL和IS NOT NULL运算符
所以万一你的问题:
SELECT pid FROM planets WHERE userid IS NULL
还有一个<=>
运算符:
SELECT pid FROM planets WHERE userid <=> NULL
会工作。 好的是, <=>
也可以用于非NULL值:
SELECT NULL <=> NULL
产生1
。
SELECT 42 <=> 42
产生1
。
看到这里: https : //dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_equal-to
有同样的问题在哪里查询:
SELECT * FROM 'column' WHERE 'column' IS NULL;
没有返回任何值。 似乎是MyISAM的一个问题,对InnoDB中的数据的相同查询返回了预期的结果。
带着:
SELECT * FROM 'column' WHERE 'column' = ' ';
返回所有预期的结果。
将数据库从Access转换到MySQL(使用vb.net与数据库通信)时,我遇到同样的问题。
我需要评估一个字段(字段typesvarchar(1))是否为空。
这个声明适用于我的情况:
SELECT * FROM [table name] WHERE [field name] = ''