替代MySQL中的ENUM数据类型

时间:2016-03-15 12:27:52

标签: mysql database

我已将ENUM数据类型用于表中的字段,但其未修复的值可能会在将来更改。那么ENUM字段的替代解决方案是什么呢?

获取引用表还是使列varchar或整数?

2 个答案:

答案 0 :(得分:2)

当你说未来的价值可能发生变化时,我认为你回答了自己的问题:你必须转而采用一种方法,将数据存储在一个中心位置(而不是分散在整个数据库中);换句话说,一个主表。

额外的好处是对值的更改不需要DDL命令(0),而是简单的DML命令(ALTER TABLEINSERT INTO)。这甚至可以写一个简单的管理。

例如:

UPDATE

......被替换为:

CREATE TABLE car (
    car_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    plate VARCHAR(20) NOT NULL,
    color ENUM('White', 'Black', 'Red', 'Blue'),
    PRIMARY KEY (car_id),
);

毋庸置疑,您可以在任何其他具有颜色的实体中重复使用颜色定义。

答案 1 :(得分:0)

我喜欢使用varchar,然后在映射到正确值的代码中声明常量。我经常也会在列的注释中列出可能的值及其含义。

使用varchar的效率低于使用tinyint(就像Aju John在他的评论中所建议的那样),但除非我正在处理一个真正的性能关键或巨大的表 - 我发现它更容易处理。它允许我在手动选择表中的数据和调试代码时理解实际值(即,如果我使用整数列,则不记住每个数字的含义),并且在大多数情况下,效率和便利之间的权衡是非常值得。