对于MySQL数据类型的“枚举”和“集合”,使用一种相对于另一种的优缺点是什么?
数据类型示例:
- 枚举('A','B','C')
- set('A','B','C')
我知道的唯一区别是ENUM仅允许选择一个值,而SET仅允许选择多个值。
Answers:
如MySQL文档所述:
ENUM或SET列的定义确实限制了输入到该列中的值。不满足以下条件的值会发生错误:
一个ENUM值必须是列定义中列出的值之一,或其内部等效数字。该值不能是错误值(即0或空字符串)。对于定义为ENUM('a','b','c')的列,诸如'','d'或'ax'的值是非法的,将被拒绝。
SET值必须是空字符串或仅由列定义中列出的值组成的值,并用逗号分隔。对于定义为SET('a','b','c')的列,诸如'd'或'a,b,c,d'的值是非法的并且被拒绝。
(a, b, c, d)
将不会被拒绝。只是d
将被拒绝,从而导致价值(a, b, c)
。
枚举和设置完全取决于要求,例如,如果您有一个单选按钮列表,一次只能选择一个,则使用枚举。如果您有一个复选框列表,一次可以选择一个以上的复选框,请使用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实际上每次只能存储一次。您会发现最后两行的结果均为空。