MySQL 8.4 Release Notes
1.7.3.3 ENUM 和 SET 约束
ENUM 和 SET 列提供了定义只能包含给定值集的列的高效方式。见第13.3.5节,“ENUM 类型”,和第13.3.6节,“SET 类型”。
除非禁用严格模式(不推荐,但见第7.1.11节,“服务器 SQL 模式”),ENUM 或 SET 列的定义将作为列值的约束。出现不满足这些条件的值时,发生错误:
-
一个
ENUM值必须是列定义中列出的其中之一,或者其内部数字等价值。该值不能是错误值(即0或空字符串)。对于定义为'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'。