CREATE TABLE t1 (
user_id INT,
dt TIMESTAMP
);
INSERT INTO t1 (user_id, dt) VALUES (1, NULL);
SELECT * FROM t1;
結果:dt 顯示為 插入時的當前時間戳,而非 NULL!

| 列類型/屬性 | 插入 NULL 的實際行為 | ||
|---|---|---|---|
| 普通類型 (CHAR, INT 等) | 存儲 NULL | ||
| TIMESTAMP | 存儲當前時間戳 | ||
| AUTO_INCREMENT | 存儲下一個自增值 |
| c1 | LENGTH | CHAR_LENGTH | 顯示 |
|---|---|---|---|
| NULL | NULL | NULL | NULL |
| '' | 0 | 0 | (空行) |

WHERE phone IS NULL -- 是 NULL
WHERE phone IS NOT NULL -- 非 NULL
錯誤寫法:WHERE phone = NULL (永遠為 UNKNOWN,不返回任何行)

SELECT COUNT(phone) FROM t2; -- 結果 1 (只統計 '')
SELECT COUNT(*) FROM t2; -- 結果 2 (統計所有行)
利用特性:COUNT(col) 可直接統計「有值」的行數,無需 WHERE col IS NOT NULL。
NULL = NULL -- UNKNOWN (非 TRUE)
'' = '' -- TRUE
NULL > 0 -- UNKNOWN
NOT NULL + 合理的默認值。TIMESTAMP NULL DEFAULT NULL。IS NULL/IS NOT NULL 判斷 NULL,不用 =/!=。COUNT(col) 忽略 NULL 特性,簡化查詢。理解這兩個核心陷阱,能避免 80% 以上與 NULL 相關的疑難雜癥。