此列的数据类型是int / bool(1还是零)还是使用
ENUM
和enabled
和disabled
更好? ?优点或缺点是什么?比起两个有效状态,您拥有4个或10个甚至更多个状态?随着所需值数量的增加,优点和缺点会左右摇摆吗?
#1 楼
我发现了一篇非常奇怪但内容丰富的文章,其中介绍了为什么不应该使用ENUM的8个原因。即使没有该文章,我也知道
有这不是添加新值的简单方法,有些技术具有很高的风险
永远不要使用数字
仅使用字符串(@DTest在其答案中已经提到过)
评论
尽管此主题中的其他答案很有帮助,但由于这篇文章非常有帮助,因此我将其标记为答案。
–杰克·威尔逊(Jake Wilson)
2011年10月19日在16:44
+1您无法在其他表中重复使用ENUM列的成员列表。 ENUM对其他DBMS的可移植性受到限制。
–有一天
2011-10-20 8:24
如果我的字段与同一表的其他记录有关系,该怎么办?例如,假设一个商店商品的单位模型,其中每个记录应具有与其相关单位组成有关的属性。即吨,千克,克
–SaidbakR
16年1月12日在12:52
那篇文章没什么奇怪的-太好了!我认为正是这篇文章使我明白了他们为什么不好!我给了它+1!
–Vérace
17-10-24在16:52
本文建议使用一个良好的旧表,而不是ENUM类型。我们应该将此添加到答案中吗?
– Utku
17年11月24日在15:51
#2 楼
好吧,首先,我们有存储需求。我要假设你的意思是tinyint(而不是int)。ENUM占用1个字节(如果小于255个值)或2个字节(最大65,535
TinyInt占用1个字节(最多255个值)
布尔值是TinyInt的同义词
因此,从表面上看,它们都是一样的。ENUM确实占用了一些元数据不过,与之关联的字符串值(旧src)
我想说的是,尽管您添加了更多的值,但是任何优势都开始摆脱
ENUM
,特别是如果在表已被使用之后添加这些值,因为您必须更改表结构以适应。使用
ENUM
有什么好处?就值而言,它是字符串表示形式,就我而言。有价值取决于您的应用程序。评论
+1是唯一真正的优势:字符串表示。其他一切都将继续前进。
– RolandoMySQLDBA
2011年10月19日下午16:26
#3 楼
我发现ENUM是代码表的缩写形式。它的主要优点是它避免了加入和显示代码描述所需的代码。如果它们以字符串形式到达,也可以简化设置值。我发现它具有以下缺点:
无法提供有关代码的其他元数据。
很难添加或禁用值。 (禁用代码可以通过触发器和到期字段完成。)
无法在数据库中完成I18n。
评论
所有MySQL开发人员都应将此问题添加为书签,因为它可能成为令人伤心或胜利的根源。 +1 !!!