> For the complete documentation index, see [llms.txt](https://404dream.gitbook.io/mysql/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://404dream.gitbook.io/mysql/summary/creating-and-using-a-database/retrieving-information-from-a-table/working-with-null-values.md).

# 4.3.4.6 NULL值

从概念上讲，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节“空值问题”。
