ENUM
和 SET
列提供了一种有效的方式来定义只能包含一组给定值的列。请参见第11.3.5节“ ENUM类型”和 第11.3.6节“ SET类型”。
除非禁用了严格模式(不建议这样做,但请参见 第5.1.11节“服务器SQL模式”),ENUM
否则a 或 SET
column 的定义将成为 对输入到该列中的值的约束。不满足以下条件的值会发生错误:
-
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'
。