'':代表「值存在,但長度為 0」。佔用實際儲存空間(VARCHAR 1-2 位元組長度前綴)。比喻:NULL = 從未分配房間;'' = 分配了房間但房間是空的。
CREATE TABLE ceshi (ID INT, createDate TIMESTAMP, name VARCHAR(10));
-- 插入 NULL
INSERT INTO ceshi VALUES (1, NULL); -- Timestamp 自動填入當前時間!NULL 不被存入
INSERT INTO ceshi (ID, name) VALUES (3, NULL); -- Varchar 正常存入 NULL
-- 插入空字串
INSERT INTO ceshi VALUES (2, ''); -- Timestamp 變 '0000-00-00 00:00:00'(無效日期)
INSERT INTO ceshi (name) VALUES (''); -- Varchar 存入長度 0 的字串
SELECT COUNT(name) FROM ceshi; -- 僅計算非 NULL 值,空字串 '' 會被計入,NULL 不計入
-- 結果:1(只有那筆 '')
COUNT(*):計算行數,包含 NULL。COUNT(col):計算該欄位非 NULL 行數。SUM/AVG:忽略 NULL。SELECT '' = ''; -- TRUE (1)
SELECT NULL = NULL; -- NULL (unknown),非 TRUE/FALSE
SELECT '' IS NULL; -- FALSE
SELECT NULL IS NULL; -- TRUE
永遠使用 IS NULL / IS NOT NULL 判斷 NULL,切勿用 = / !=。
''。SELECT CONCAT('abc', NULL); -- 結果 NULL(任何與 NULL 運算結果為 NULL)
SELECT CONCAT('abc', ''); -- 結果 'abc'
SELECT 'abc' + NULL; -- 數值運算隱性轉型,結果 NULL
''。NOT NULL DEFAULT '' 或 DEFAULT 0,避免 NULL 處理複雜度。'UNKNOWN')替代 NULL,確保唯一索引生效。