3

我有一个只能处于三种状态的对象列表。

数据的简化示例:

Substance State
H2O  solid
H2O  fluid
CO2  gas
...  ...

是使用更好TINYINT(2)还是ENUM其他什么更好?我应该按原样插入值(VARCHAR)还是使用数字?外部值表?

4

4 回答 4

2

任何内容都不会存储在不到一个字节中。

TINYINT(2) 和具有 3 个成员的 ENUM 都将产生 1 个字节的存储空间。要么都会好的。

ENUM 的好处是您可以使用简单的英文名称,并且它们存储紧凑。ENUM 的坏处是它们不是 ANSI SQL。

于 2012-07-10T06:11:55.273 回答
2

我会通过 ID 引用外部表。然后该表将信息显示为文本。在您的选择语句中,您只需加入即可。如果你不知道我在说什么,问我一个例子:)

不过,出于各种原因,我不会使用 ENUM。在这里找到最重要的:http: //komlenic.com/244/8-reasons-why-mysqls-enum-data-type-is-evil/

于 2012-07-10T06:16:15.273 回答
0

创建一个主表作为状态(id int,desc varchar),根据它会遇到的问题

id   |  desc
1    |  Solid
2    |  Liquid
3    |  Gas

并在解决方案(主)表中引用状态表的 id

于 2012-07-10T06:12:51.537 回答
0

我认为您可以将信息存储在 BIT 类型的列中,并允许在

柱子。以下是价值和你的数据的映射。

H2O 固体 --> 是的

H2O 流体 --> FALSE

二氧化碳气体 --> NULL

于 2012-07-10T06:15:47.907 回答