MySQL(mariadb)奇怪的VARCHAR WHERE NULL行为

时间:2013-07-22 11:51:45

标签: mysql phpmyadmin mariadb mysql-5.5

我有一张表:

id    name (varchar)
--------------------------
1     test
2     some
3     NULL
4     test

当我查询

SELECT * FROM table WHERE name != 'some';

我得到了结果:

id    name
--------------------------
1     test
4     test

为什么它不会返回name == NULL行?

服务器版本:5.5.31-MariaDB-1~pqueeze-log - mariadb.org二进制发行版(协议版本10)

客户端版本:libmysql - 5.1.66(mysqli) Protokoll版本:10

3 个答案:

答案 0 :(得分:3)

因为与NULL进行比较会产生UNKNOWN。您必须使用IS运算符。

SELECT * FROM table
WHERE name != 'some' 
OR    name IS NULL

答案 1 :(得分:2)

对于NULL,您需要使用WHERE name IS NULL而不是使用==等同于<{1}}

您可以在MySQL文档(3.3.4.6. Working with NULL Values

中找到更多详细信息

为“MySQL NULL”搜索stackoverflow会产生许多相同的问题

答案 2 :(得分:0)

因为NULLEmpty String不相同。 NULL存在Empty String时,NULL根本不存在或未知,但零长度值。如果您想搜索SELECT * FROM table WHERE name != 'some' OR name IS NULL 。然后你可以在条件中指定它。

{{1}}