我有一个只能在三种状态下的对象列表。
数据的简化示例:
Substance State
H2O solid
H2O fluid
CO2 gas
... ...
使用TINYINT(2)
或ENUM
或其他什么方式更好吗?我应该按原样插入值(VARCHAR)还是使用数字?外部价值表?
答案 0 :(得分:2)
不会以少于一个字节存储任何内容。
TINYINT(2)和一个包含3个成员的ENUM都会产生1个字节的存储空间。要么没事。
关于ENUM的好处是你可以使用简单的英文名称,并且它们可以紧凑地存储。关于ENUM的坏处是它们不是ANSI SQL。
答案 1 :(得分:2)
我会通过ID向外部表格提供帮助。然后该表将信息显示为文本。 在您的select语句中,您只需加入即可。如果你不知道我在说什么,请问我一个例子:)
但是,由于各种原因,我不会使用ENUM。在这里找到最重要的:http://komlenic.com/244/8-reasons-why-mysqls-enum-data-type-is-evil/
答案 2 :(得分:0)
创建一个主表作为state(id int,desc varchar), 根据问题 它会有
id | desc
1 | Solid
2 | Liquid
3 | Gas
并在解决方案(主)表中引用状态表的id
答案 3 :(得分:0)
我认为您可以将信息存储在类型为BIT的列中,并在
中允许空值列。以下是值和数据的映射。
CO2气体 - > NULL