MySQL 8.4 發行說明
在您習慣之前,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,任何其他值都表示 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 值問題」。