MySQL枚举与集合
问题描述:
对于MySQL数据类型“枚举”和“集合”使用一个和另一个的区别和优缺点是什么?MySQL枚举与集合
实施例的数据类型:
- 枚举( 'A', 'B', 'C')
- 集( 'A', 'B', 'C')
我知道的唯一区别是ENUM只允许选择一个值,而SET允许选择多个值。
答
由于MySQL documentation状态:ENUM的
定义或SET列不作为价值观 约束进入列。对于不满足以下条件的值,会发生错误:
ENUM值必须是列定义中列出的值之一,或 的内部数值等效值。该值不能是错误 值(即0或空字符串)。对于定义为 ENUM('a','b','c')的列,诸如'','d'或'ax'的值是非法的,并且被拒绝 。
SET值必须是空字符串或仅包含由逗号分隔的列定义中列出的 值的值。对于定义为SET('a','b','c')的 列,诸如'd'或'a,b,c,d' 的值是非法的并且被拒绝。
答
枚举和设置完全取决于需求,如果您有一个单选按钮列表,一次只能选择一个列表,请使用枚举。如果你有一个复选框列表,在一次可以选择多个项目,使用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 =复选框字段(被列出的那些仅接受的值,可以选择多个)
否进阶/ disadv 。您应该根据您的要求选择其中之一。 – ravnur 2013-02-10 12:02:38
这两种类型是无关的。你可能会问哪一个更好 - int或者文本? – Bohemian 2013-02-10 14:20:02