MySQL枚举与集合

对于MySQL数据types的“枚举”和“设置”有什么区别和优点和缺点,使用一个与其他?

示例数据types:

  • 枚举('A','B','C')
  • (“A”,“B”,“C”)

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

正如MySQL文档所述:

ENUM或SET列的定义确实作为input到列中的值的约束条件。 不符合这些条件的值发生错误:

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

SET值必须是空string或仅由列定义中列出的值组成的值,由逗号分隔。 对于定义为SET('a','b','c')的列,诸如“d”或“a,b,c,d”的值是非法的并被拒绝。

比喻:
ENUM =广播字段(只有接受的值是列出的,可能只能选一个)
SET =checkbox字段(只有接受的值是列出的,可以select多个)

枚举和设置完全取决于需求,如果你有一个单选button的列表,一次只能select一个,使用枚举。 如果你有一个checkbox的列表,在一个时间多于一个项目可以select,使用设置。

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