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 值問題」。