相關文件 下載本手冊
PDF (美國信紙尺寸) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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 ... ASCNULL 值會先呈現,如果您執行 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 值問題」