相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  处理 NULL 值

5.3.4.6 处理 NULL 值

NULL 值可能会令人惊讶,直到您习惯它。从概念上讲,NULL 表示 缺少的未知值,并且它的处理方式与其他值略有不同。

要测试 NULL,请使用 IS NULLIS 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 中,0NULL 表示 false,而其他任何值都表示 true。布尔运算的默认真值为 1

NULL 的这种特殊处理方式解释了为什么在上一节中,需要使用 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 列中,因为它们实际上是 NOT NULL。请参阅 第 B.3.4.3 节“NULL 值的问题”