MySQL 9.0 參考手冊  /  ...  /  ENUM 和 SET 約束

1.7.3.3 ENUM 和 SET 約束

ENUMSET 資料行提供了一種有效的方式來定義只能包含一組給定值的資料行。請參閱第 13.3.6 節「ENUM 類型」第 13.3.7 節「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' 的值。