ENUM
和
SET
列提供了一种有效的方法来定义只能包含一组给定值的列。请参阅第 11.3.5 节,“ENUM 类型”和
第 11.3.6 节,“SET 类型”。
除非禁用严格模式(不推荐,但请参阅
第 5.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
or ,可以在严格模式下抑制无效值的错误UPDATE IGNORE
。在这种情况下,会生成警告而不是错误。对于
ENUM
,值作为错误成员 ( 0
) 插入。对于
SET
,除了删除任何无效的子字符串外,将按给定的方式插入值。例如,'a,x,b,y'
结果值为
'a,b'
。