MySQL枚举与集合

问题描述:

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

实施例的数据类型:

  • 枚举( 'A', 'B', 'C')
  • 集( 'A', 'B', 'C')

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

+3

否进阶/ disadv 。您应该根据您的要求选择其中之一。 – ravnur 2013-02-10 12:02:38

+1

这两种类型是无关的。你可能会问哪一个更好 - int或者文本? – Bohemian 2013-02-10 14:20:02

由于MySQL documentation状态:ENUM的

定义或SET列不作为价值观 约束进入列。对于不满足以下条件的值,会发生错误:

ENUM值必须是列定义中列出的值之一,或 的内部数值等效值。该值不能是错误 值(即0或空字符串)。对于定义为 ENUM('a','b','c')的列,诸如'','d'或'ax'的值是非法的,并且被拒绝 。

SET值必须是空字符串或仅包含由逗号分隔的列定义中列出的 值的值。对于定义为SET('a','b','c')的 列,诸如'd'或'a,b,c,d' 的值是非法的并且被拒绝。

+11

注意! '(a,b,c,d)'的值不会被拒绝。只有'd'将被拒绝,从而产生值'(a,b,c)'。 – 2014-04-02 06:53:06

+2

这可能是官方文档,但它仍然是描述它们的一种非常混乱的方式。根据其他答案,区别变得清晰。 SET是一个ENUM数组,其中每个值由0个或多个枚举类型值组成。 – Jonathon 2015-04-12 23:08:03

+1

这不是一个好的答案。要求明确解释差异和缺点/优点;正式文件,其中这个答案只是一个副本,没有这样做。如果严格模式开启, – Smuuf 2016-03-30 13:20:25

枚举和设置完全取决于需求,如果您有一个单选按钮列表,一次只能选择一个列表,请使用枚举。如果你有一个复选框列表,在一次可以选择多个项目,使用set。

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实际上只能每次存储一次。你会发现最后两行的结果都是空的。

类比:
ENUM =无线电字段(只接受的值是那些列出的,可以仅选择一个)
SET =复选框字段(被列出的那些仅接受的值,可以选择多个)