MySQL枚举与集合

时间:2013-02-10 11:43:35

标签: mysql database

对于MySQL数据类型“枚举”和“设置”使用一个与另一个的区别和优缺点是什么?

示例数据类型:

  • enum('A','B','C')
  • 设置('A','B','C')

我所知道的唯一区别是ENUM只允许选择一个值,而SET允许选择多个值。

6 个答案:

答案 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的答案是错误的,并且包含有缺陷的示例,因为在插入多个值时,这些值必须是字符串,并用逗号分隔。他所有的插入实际上只是插入一个值(最后两个不在定义的集合中)