MySQL 8.4 參考手冊  /  ...  /  ENUM 和 SET 限制

1.7.3.3 ENUM 和 SET 限制

ENUMSET 資料行提供一種有效的方式來定義只能包含一組特定值的資料行。請參閱 第 13.3.5 節,「ENUM 型別」第 13.3.6 節,「SET 型別」

除非停用嚴格模式(不建議,但請參閱 第 7.1.11 節,「伺服器 SQL 模式」),否則 ENUMSET 資料行的定義會作為輸入資料行值的限制。對於不符合這些條件的值,會發生錯誤。

  • ENUM 值必須是資料行定義中列出的其中一個值,或其內部的數值等效值。該值不能是錯誤值(也就是 0 或空字串)。對於定義為 ENUM('a','b','c') 的資料行,'''d''ax' 等值是無效的,會被拒絕。

  • SET 值必須是空字串,或僅由資料行定義中列出的值以逗號分隔組成的值。對於定義為 SET('a','b','c') 的資料行,'d''a,b,c,d' 等值是無效的,會被拒絕。

如果使用 INSERT IGNOREUPDATE IGNORE,則可以在嚴格模式下抑制無效值的錯誤。在這種情況下,會產生警告,而不是錯誤。對於 ENUM,該值會以錯誤成員 (0) 的形式插入。對於 SET,該值會按給定的方式插入,但會刪除任何無效的子字串。例如,'a,x,b,y' 會產生 'a,b' 的值。