| 特性 | ENUM | SET |
|---|---|---|
| 儲存結構 | 單值,從預定義列表選一 | 多值,從預定義列表選零或多個(逗號分隔) |
| 預設值 | 若未指定:允許 NULL 時為 NULL,否則為第 1 個枚舉值 | 空字串 '' |
| 非法值處理(非嚴格模式) | 轉為內部索引 0,顯示為空字串 | 非法子字串被忽略,如 'a,x,b,y' → 'a,b' |
啟用後,ENUM/SET 定義成為**真正約束**:
''、'd'、'ax' 等非法值 → 報錯。'd'、'a,b,c,d' → 報錯。嚴格模式下加 IGNORE:
'a,x,b,y' → 'a,b'),產生警告。-- 配置檔 my.cnf
[mysqld]
sql_mode = STRICT_TRANS_TABLES # 或 STRICT_ALL_TABLES
-- 或運行時
SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES';