从概念上来说,NULL意味着,”一个缺省的、不清楚的值”,它和其他值的处理方式不同.

为了判断是否为NULL,使用IS NULLIS NOT NULL,如下所示:

1
2
3
4
5
6
mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
+-----------+---------------+
| 1 IS NULL | 1 IS NOT NULL |
+-----------+---------------+
| 0 | 1 |
+-----------+---------------+

不能使用关系运算符,例如=,<<>来判断NULL,使用下面的查询向你论证:

1
2
3
4
5
6
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中,0NULL代表假,除此之外的其他值代表真.布尔运算真的默认值为1.

使用GROUP BY时,两个NULL被看作是等价的.

使用ORDER BY时,如果使用ORDER BY ... ASC,NULL为第一个,如果使用ORDER BY ... DESC,NULL为最后一个.

一个常见的错误是,认为不能向一个定义为NOT NULL的列插入0或者空字符串.实际并不是这样的.NULL意味着缺省一个值,而0和空字符串也是值.你可以通过IS [NOT] NULL很容易地测试:

1
2
3
4
5
6
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列插入0和空字符串.

英文原文:

Working with NULL Values