ENUM 為字符串枚舉類型,存儲預定義集合中的單一值,1-255 個成員佔 1 字節,256-65535 佔 2 字節,最多 65535 個成員。
CREATE TABLE user_sex (sex ENUM('M','F'));
INSERT INTO user_sex VALUES ('M'), ('s'), ('2'), ('f');
-- 實際存儲:'M', 'M', 'M', 'F'
'f' 自動轉為 'F'。's'、'2' 均存為 'M',**不報錯**,僅產生警告(嚴格模式下報錯)。INSERT ... VALUES (1) 存儲第一個枚舉值 'M';ORDER BY sex 按定義順序排序('M' < 'F')。-- 假設表 xxx(folder ENUM('inbox','outbox','other'))
-- 插入
INSERT INTO xxx (folder) VALUES ('inbox'), ('outbox'), ('other');
-- 更新
UPDATE xxx SET folder = 'inbox' WHERE id = 1;
-- 刪除
DELETE FROM xxx WHERE folder = 'outbox';
-- 查詢(按枚舉順序)
SELECT * FROM xxx ORDER BY folder;
| 優點 | 缺點 |
|---|---|
| 存儲緊湊(1-2 字節) | 修改枚舉值需 ALTER TABLE,鎖表風險 |
| 數據完整性約束(非嚴格模式下僅警告) | 非法值靜默轉換,易隱藏 Bug |
| 排序符合業務邏輯順序 | 不可直接 JOIN 字符串表(需 CAST) |
TINYINT + 查找表 或 CHECK 约束(8.0.16+)。STRICT_TRANS_TABLES),非法值直接報錯。