MySQL 9.0 版本資訊
在您習慣之前,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 值問題」。