MySQL 8.4 發行說明
ENUM 和 SET 資料行提供一種有效的方式來定義只能包含一組特定值的資料行。請參閱 第 13.3.5 節,「ENUM 型別」和 第 13.3.6 節,「SET 型別」。
除非停用嚴格模式(不建議,但請參閱 第 7.1.11 節,「伺服器 SQL 模式」),否則 ENUM 或 SET 資料行的定義會作為輸入資料行值的限制。對於不符合這些條件的值,會發生錯誤。
ENUM值必須是資料行定義中列出的其中一個值,或其內部的數值等效值。該值不能是錯誤值(也就是 0 或空字串)。對於定義為ENUM('a','b','c')的資料行,''、'd'或'ax'等值是無效的,會被拒絕。SET值必須是空字串,或僅由資料行定義中列出的值以逗號分隔組成的值。對於定義為SET('a','b','c')的資料行,'d'或'a,b,c,d'等值是無效的,會被拒絕。
如果使用 INSERT IGNORE 或 UPDATE IGNORE,則可以在嚴格模式下抑制無效值的錯誤。在這種情況下,會產生警告,而不是錯誤。對於 ENUM,該值會以錯誤成員 (0) 的形式插入。對於 SET,該值會按給定的方式插入,但會刪除任何無效的子字串。例如,'a,x,b,y' 會產生 'a,b' 的值。