在您习惯之前,NULL 值可能会令人惊讶。从概念上讲,NULL 表示“缺失的未知值”,它的处理方式与其他值有些不同。

    要测试 NULL,请使用 IS NULL 和 IS NOT NULL 运算符,如下所示:

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

    您不能使用算术比较运算符(例如 =、< 或 <>)来测试 NULL。你自己要验证这一点,请尝试以下查询:

    1. mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;
    2. +----------+-----------+----------+----------+
    3. | 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL |
    4. +----------+-----------+----------+----------+
    5. | NULL | NULL | NULL | NULL |
    6. +----------+-----------+----------+----------+

    因为任何与 NULL 的算术比较的结果也是 NULL,所以您无法从此类比较中获得任何有意义的结果。

    在 MySQL 中,0 或 NULL 表示 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 轻松地对此进行测试,如下所示:

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

    因此,完全可以将零或空字符串插入 NOT NULL 列,因为它们实际上是 NOT NULL。