MySQL 9.0 发行说明
ENUM
和 SET
列提供了一种有效的方式来定义只能包含给定值集的列。请参阅 第 13.3.6 节,“ENUM 类型”,以及 第 13.3.7 节,“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'
。