对于MySQL数据类型"枚举"和"设置"使用一个与另一个的区别和优缺点是什么?
示例数据类型:
我所知道的唯一区别是ENUM只允许选择一个值,而SET允许选择多个值.
Bra*_*ent 144
类比:
ENUM =无线电字段(只有接受的值是列出的值,可能只选择一个)
SET =复选框字段(只有接受的值是列出的值,可以选择多个)
use*_*117 64
正如MySQL文档所述:
ENUM或SET列的定义确实作为对输入到列中的值的约束.对于不满足以下条件的值,会发生错误:
ENUM值必须是列定义中列出的值之一,或其内部数字等效值.该值不能是错误值(即0或空字符串).对于定义为ENUM('a','b','c')的列,诸如'','d'或'ax'之类的值是非法的并被拒绝.
SET值必须是空字符串或仅包含由逗号分隔的列定义中列出的值的值.对于定义为SET('a','b','c')的列,诸如'd'或'a,b,c,d'之类的值是非法的并被拒绝.
Win*_*bob 20
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');
Run Code Online (Sandbox Code Playgroud)
你可以复制上面的代码并将其粘贴到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');
Run Code Online (Sandbox Code Playgroud)
您也可以复制上面的代码.而且你会发现每个ENUM实际上每次只能存储一次.你会发现最后两行的结果都是空的.
其实很简单:
当您定义ENUM('Yes', 'No', 'Maybe') 时,您必须仅插入这些值之一(或它们的位置索引号)
当您定义SET('R', 'W', 'X') 时,您可以插入一个空字符串,或者这些值中的一个或多个。如果您插入的内容不在预定义集中,则会插入一个空字符串。请注意,在插入之前会丢弃所有重复值,因此每个允许值仅插入一个实例。
希望这能解决问题。
请注意,Winbobob 的答案是不正确的,并且包含有缺陷的示例,因为在插入多个值时,这些值必须是字符串,用逗号分隔。他的所有插入实际上只插入一个值(最后两个不在定义的集合中)
| 归档时间: |
|
| 查看次数: |
54375 次 |
| 最近记录: |