MySQL中的空比较

时间:2014-04-28 12:56:33

标签: mysql null comparison

我试图在mysql中使用 case 时比较某些字段的值。我发现了奇怪的行为。所以我尝试了以下查询。它在mysql中返回false。我无法理解它背后的原因。任何帮助?
select if(null=null,'true','false');

4 个答案:

答案 0 :(得分:2)

你应该使用IS

 SELECT IF(NULL IS NULL,'true','false');

或者如果您正在比较其他字段名称,那么例如

 SELECT * FROM `table_name` WHERE `field_name` IS NULL

或否定它

 SELECT * FROM `table_name` WHERE `field_name` IS NOT NULL

答案 1 :(得分:1)

来自Working with null values页面的MySQL文档:

  

在您习惯之前,NULL值可能会令人惊讶。   从概念上讲,NULL表示“缺少未知值”并对其进行处理   与其他价值观略有不同。

由于NULL是“未知”,比较NULL = NULL也将是未知的并且将返回NULL,并且由于NULL不是TRUE,因此您的函数将返回'false'。

您可以使用IS NULL运算符:

SELECT IF(NULL IS NULL, 'true', 'false')

或者你也可以使用NULL-safe equal to operator

SELECT IF(NULL <=> NULL, 'true', 'false')

答案 2 :(得分:1)

您也可以通过以下方式比较NULL:

SELECT IF (NULL<=>NULL,'True','False');

答案 3 :(得分:0)

NULL不是值;它缺乏价值。所以,从逻辑上讲,它无法与自身进行同等比较。

这不是MySQL特有的;这是在计算机编程领域发现的一种现象(虽然有一些值得注意的例外,例如C)。

运营商IS执行更智能,无效的&#34;比较&#34;,NULL IS NULL评估为TRUE