INSERT INTO my_table (phone) VALUES (NULL); -- 電話號碼未知
INSERT INTO my_table (phone) VALUES (''); -- 確定沒有電話
前者語義為「值不存在/未知」,後者為「值存在但為空」。二者在業務邏輯、統計分析中含義截然不同。
| 操作 | 正確語法 | 錯誤示例 |
|---|---|---|
| 判斷為 NULL | WHERE phone IS NULL | WHERE phone = NULL(永遠為 FALSE) |
| 判斷非 NULL | WHERE phone IS NOT NULL | WHERE phone != NULL |
| 轉換為指定值 | IFNULL(phone, '未填') / COALESCE(phone, '未填') |
1 + NULL = NULL、CONCAT('A', NULL) = NULLNULL = NULL 為 NULL(非 TRUE),NULL < 10 為 NULLTRUE AND NULL = NULL、FALSE OR NULL = NULLNULL 列建立索引NOT NULLLOAD DATA INFILE:缺失列默認寫入 '',需在數據文件用 \N 表示 NULLORDER BY col ASC:NULL 排在最前;DESC 排在最後GROUP BY、DISTINCT:所有 NULL 視為同一組SELECT COUNT(*), COUNT(age) FROM person;
-- COUNT(*) 計算總行數
-- COUNT(age) 忽略 NULL,僅統計非空值
TIMESTAMP 列插入 NULL → 自動填充當前時間AUTO_INCREMENT 整數列插入 NULL → 自動填充下一序號良好習慣:業務明確「無值」語義時用
NULL,配合NOT NULL約束減少歧義;統計查詢優先用COUNT(*)而非COUNT(col)。