INSERT INTO t (phone) VALUES (NULL); -- 電話未知
INSERT INTO t (phone) VALUES (''); -- 無電話(明確為空)
語意完全不同,業務邏輯必須區分。
| 錯誤寫法 | 正確寫法 | 說明 |
|---|---|---|
WHERE phone = NULL | WHERE phone IS NULL | = NULL 永遠為 UNKNOWN |
WHERE phone != NULL | WHERE phone IS NOT NULL | 同理 |
WHERE phone = '' | WHERE phone = '' | 查空字串用等號 |
1 + NULL = NULLCONCAT('a', NULL) = NULLNULL = NULL → UNKNOWN (非 TRUE)NULL AND TRUE = NULL、NULL OR FALSE = NULL使用 IFNULL(expr, default)、COALESCE(a,b,c)、NULLIF(a,b) 顯式處理。
NOT NULL 才能建索引。| 函數 | 行為 |
|---|---|
COUNT(*) | 計算所有行(含 NULL) |
COUNT(col) | 僅計算非 NULL 值 |
SUM/AVG/MIN/MAX | 忽略 NULL |
GROUP_CONCAT | 忽略 NULL |
ORDER BY col ASC:NULL 排最前;DESC 排最後。GROUP BY、DISTINCT:所有 NULL 視為同一組。TIMESTAMP:INSERT NULL → 當前時間戳AUTO_INCREMENT 整數欄:INSERT NULL → 下一個自增值\N (大寫 N) 表示 NULL。''。