对于MySQL数据类型“枚举”和“设置”使用一个与另一个的区别和优缺点是什么?
示例数据类型:
我所知道的唯一区别是ENUM只允许选择一个值,而SET允许选择多个值。
答案 0 :(得分:122)
类似于:
ENUM =无线电字段(仅接受的值是列出的值,可能只选择一个)
SET =复选框字段(只有接受的值是列出的值,可以选择多个)
答案 1 :(得分:60)
正如MySQL documentation所述:
ENUM或SET列的定义确实充当值的约束 进入专栏。没有的值会发生错误 满足这些条件:
ENUM值必须是列定义中列出的值之一,或 内部数字等价物。值不能是错误 value(即0或空字符串)。对于定义为的列 ENUM('a','b','c'),诸如'','d'或'ax'之类的值是非法的,并且是 拒绝。
SET值必须是空字符串或仅包含该值的值 列定义中列出的值以逗号分隔。为一个 列定义为SET('a','b','c'),值为'd'或'a,b,c,d' 是非法的,被拒绝。
答案 2 :(得分:40)
枚举和设置完全取决于要求,如果你有一个单选按钮列表,一次只能选择一个,使用枚举。如果您有一个复选框列表,那么一次可以选择多个项目,请使用set。
答案 3 :(得分:19)
CREATE TABLE setTest(
attrib SET('bold','italic','underline')
);
INSERT INTO setTest (attrib) VALUES ('bold');
INSERT INTO setTest (attrib) VALUES ('bold,italic');
INSERT INTO setTest (attrib) VALUES ('bold,italic,underline');
您可以复制上面的代码并将其粘贴到mysql中,您会发现 SET 实际上是一个集合。您可以存储您声明的每个属性组合。
CREATE TABLE enumTest(
color ENUM('red','green','blue')
);
INSERT INTO enumTest (color) VALUES ('red');
INSERT INTO enumTest (color) VALUES ('gray');
INSERT INTO enumTest (color) VALUES ('red,green');
您也可以复制上面的代码。而且你会发现每个 ENUM 实际上每次只能存储一次。你会发现最后两行的结果都是空的。
答案 4 :(得分:1)
ENUM --> 仅选择要插入的可用值之一。
(no_null, no_any_duplicate)
SET --> 选择任意组合或单个值(如集合)并将它们插入。
(null, individual_values, all_the_available_values_together)
答案 5 :(得分:0)
实际上很简单:
定义 ENUM(“是”,“否”,“也许”)时,您必须仅插入这些值之一(或它们的位置索引号) )
定义 SET('R','W','X')时,您可以插入空字符串,或这些值中的一个或多个。如果您插入的不是预定义集中的内容,则会插入一个空字符串。请注意,在插入之前,所有重复值都将被丢弃,因此,每个允许值仅插入一个实例。
希望这可以清除它。
请注意Winbobob的答案是错误的,并且包含有缺陷的示例,因为在插入多个值时,这些值必须是字符串,并用逗号分隔。他所有的插入实际上只是插入一个值(最后两个不在定义的集合中)