表列有 NOT NULL 約束,卻能插入「空值」。工具插入卻報錯。經排查,插入的是 空字符串 '',而非 NULL。
| 特性 | 空字符串 '' | NULL |
|---|---|---|
| 含義 | 確定的「空內容」 | 「值未知/不存在」 |
| 長度 | LENGTH('') = 0 | LENGTH(NULL) = NULL |
| 存儲空間 | 不佔額外空間 | 佔用(MyISAM 每列 1 bit,InnoDB 類似) |
| NOT NULL 約束 | 允許 | 禁止 |
| 比較運算 | '' = '' → true | NULL = NULL → NULL |
| 索引存儲 | 正常入索引 | 全 NULL 不入 B+樹索引 |
WHERE col IS NOT NULL AND col <> ''
WHERE col IS NULL 可能無法命中索引(視版本)WHERE a IS NULL AND b IS NULL 全表掃描NOT NULL DEFAULT '',數值列 NOT NULL DEFAULT 0,日期列 NOT NULL DEFAULT '1970-01-01'