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值。

强调我的。

要searchNULL值的列值,您不能使用expr = NULLtesting。 以下语句不返回任何行,因为对于任何expression式expr = NULL从不为真

 SELECT pid FROM planets WHERE userid IS NULL; 

要testingNULL ,请使用IS NULLIS 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] = ''