【问题标题】:Setting the index on enum fields在枚举字段上设置索引
【发布时间】:2011-12-04 16:07:53
【问题描述】:

我有一个 MySQL 数据库,它目前使用 tinyint 字段来存储记录类型。它使用奇数编号,我们正在对此进行更改。所以目前,它显示为:

record type
1      60
2      62
3      60
4      61
5      63

数字代表类型,有:

60 = car
61 = bike
62 = motorcycle

我们需要将其转换为枚举字段,使用值carbikemotorcycle。但是,有问题的表是从大量页面中使用的,其中 SELECT 和 INSERT 是使用原始数字进行的。这将逐渐改变。所以我想知道:有没有办法更改枚举字段的索引,以便我可以将字段更改为枚举并仍然保存 type = 60 的新记录,这变成了“汽车”?我知道有一种方法可以将它设置为 0,它会变成汽车,但显然这需要我们更改所有页面,而且没有时间这样做......

【问题讨论】:

  • 所以你需要维护存储在列中的当前值,但转换为ENUM?
  • 字段 ENUM 和 SET 不能使用索引!

标签: mysql enums


【解决方案1】:

很遗憾,这是不可能的。 The manual 本身就没有希望的余地:

每个枚举值都有一个索引:

• 列中允许元素列表中的值 规范从 1 开始编号。

既然您对此无能为力,我不得不问:您为什么需要将其设为enum?我还没有遇到过这样的情况:enum 提供的any 除了方便程序员通过肉眼查看查询结果外。您希望获得的好处是什么?我不是大师,但恕我直言,无论您想实现什么,还有另一种(更好)的方法,而不是使用 enum

【讨论】:

  • 谢谢,知道了。同意enum 通常并不理想,但现在它比加入另一个表更容易。查询的简单性和查看表中数据的便捷性是优先考虑的因素。
猜你喜欢
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-20
  • 2011-07-31
相关资源
最近更新 更多