从概念上讲,NULL意味着“缺少未知值”,并且它与其他值有些不同。要测试NULL,请使用IS NULL和IS NOT NULL运算符,如下所示:
mysql>SELECT 1 IS NULL, 1 IS NOT NULL;
+-----------+---------------+
| 1 IS NULL | 1 IS NOT NULL |
+-----------+---------------+
| 0 | 1 |
+-----------+---------------+
您不能使用算术比较运算符(例如=,<或<>)来测试NULL,下面是个反面教材:
mysql>SELECT 1 = NULL, 1 <> NULL, 1 <NULL, 1 >NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 <>NULL | 1 <NULL | 1 >NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
因为与NULL的任何算术比较的结果也为NULL,您不能从这种比较获得任何有意义的结果。
在MySQL中,0或NULL表示false,任何其他值都表示真。布尔运算的真值默认为1。
这也是在前面的部分,在确定哪些动物不再活着使用death IS NOT NULL而不是death <> NULL的原因。
在GROUP BY中,两个NULL值被视为相等。
当做一个ORDER BY时,如果你做ORDER BY ... ASC,最先出现NULL值,如果你做ORDER BY ... DESC,最后出现NULL值。
使用NULL时的常见错误是假定不能在定义为NOT NULL的列中插入零或空字符串,但情况并非如此。这些实际上是值,而NULL意味着“不具有值”。您可以通过使用IS [NOT] NULL如此简单地测试这个值:
mysql>SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
+-----------+---------------+------------+----------------+
| 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL |
+-----------+---------------+------------+----------------+
| 0 | 1 | 0 | 1 |
+-----------+---------------+------------+----------------+
因此,完全有可能将一个零或空字符串插入一个NOT NULL列,因为这些实际上是NULL。请参见第B.5.4.3节“空值问题”。