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'
。