应该将选项存储为MySQL DB中的文本还是整数?

时间:2012-09-17 17:52:40

标签: php mysql

我正在创建一个包含三列的小型数据库:ID,Name,Status

'状态'可以是三件事之一:等待,批准,其他

我的问题是,在数据库中存储“状态”的最佳/最正确方法是什么?它应该存储为varchar字符串还是1,2或3整数,然后在从DB读取时将其转换为waiting / approved / other?我希望这是有道理的,谢谢你的帮助。

7 个答案:

答案 0 :(得分:5)

您应该使用tinyint数据类型来引用该状态的状态表(称为字典或查找表)。您将使用外键约束。这样就可以保持关系和域的完整性。它允许您在不更改表结构的情况下添加/更改/删除状态值。

status
=============
id  value
1   Waiting
2   Approved
3   Other
users
====================
id  name   status_id
1   Bobby  3

答案 1 :(得分:1)

创建另一个名为

的表

有2个字段的状态 id INT主要自动增量 name varchar(30)。

按整数在用户表中添加状态,并使用JOIN引用它们。

您还可以将users表中的状态更改为status_id,这样会更有意义。

IMO这是

中最合适的方式

答案 2 :(得分:0)

整数较小。您的应用可以将整数翻译成多种语言等。

整数很好。

结帐ENUM。如果没有,请确保您使用的是right sized integer

答案 3 :(得分:0)

一般来说,将这些项目存储为文本,除非:

  • 您将搜索它们:字符搜索需要更长时间并且比数字(整数)搜索更昂贵
  • 你需要对它们进行'数学'(求和,平均值,标准偏差等):转换/转换为数字,执行计算然后对结果做一些事情是非常过程密集的)

答案 4 :(得分:0)

使用带有单独查找表的数字。

答案 5 :(得分:0)

整数字段比varchar字段使用更少的内存空间,因此将“status”选项存储为数字将略微减少内存使用量。

我建议将'status'存储在一个整数中,并在必要时将其转换为相应的值。

答案 6 :(得分:0)

我认为它们应该按原样存储:枚举

示例:

status ENUM('waiting', 'approved', 'other') DEFAULT 'other'