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'