28

我正在做一个项目,我想在表格中存储一些容易枚举的信息。MySql 的枚举数据类型正是我想要的: http: //dev.mysql.com/doc/refman/5.0/en/enum.html。SQL Server 2005 中是否有等价物?

我知道我可以使用键将可能的值存储在类型表中,但我宁愿不必链接回它进行描述。我们的数据库标准不允许我们链接非整数或唯一标识符字段,因此也将可能的键存储为字符。

4

2 回答 2

24

这对你有用吗?

来自http://blechie.com/wtilton/archive/2007/08/24/303.aspx

创建表...

MySQL:

ColumnName ENUM('upload', 'open', 'close', 'delete', 'edit', 'add')
   DEFAULT 'open'

SQL 服务器:

ColumnName varchar(10) 
   CHECK(ColumnName IN ('upload', 'open', 'close', 'delete', 'edit', 'add')) 
   DEFAULT 'open'
于 2008-11-04T18:20:05.557 回答
17

MySQL 的 ENUM 数据类型的一个特点是它在每一行的值列表中只存储一个数字索引,而不是字符串本身。因此,它通常更具存储效率。此外,当您按 ENUM 列排序时,默认行为是按数字索引排序,因此按 ENUM 中元素的顺序。

Nikki9696 建议使用带有 CHECK 约束的 VARCHAR 列。这满足了将值限制为某个允许值的短列表,但它不模拟存储效率或特殊的排序顺序。

获得这两种行为的一种方法是将列声明为查找表中的整数外键,您可以在其中存储每个允许的字符串。

于 2008-11-04T18:27:13.920 回答