2008-11-04 116 views
25

我正在开发一个项目,我想在表格中存储一些易于枚举的信息。 MySql的枚举数据类型正是我想要的:http://dev.mysql.com/doc/refman/5.0/en/enum.html。在SQL Server 2005中是否有相当的功能?SQL Server 2005是否与MySql的ENUM数据类型等效?

我知道我可以将一个可能的值存储在类型表中,但我宁愿不用链接它来获得描述。我们的数据库标准不允许我们链接非整数或uniqueidentifier字段,因此将可能的键存储为字符也是一样。

回答

23

这是否适合您?

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' 
+0

这对我很有用。还有一个问题:是否有一种简单的方法可以告诉枚举的有效值,而不必选择约束条件?我知道可能没有,我必须根据这个做出我的决定。 – 2008-11-04 19:33:46

+0

我不确定“选择”约束是什么意思,但您可能能够将此系统查询的结果包装为可满足您需求的某些内容。 从sys.check_constraints中选择定义其中[name] ='yourConstraintName' – Nikki9696 2008-11-04 19:39:50

17

一个CHARACT erm的MySQL的ENUM数据类型是,它在每一行中只存储一个数值索引到值列表中,而不是字符串本身。所以它通常具有更高的存储效率。同样,按ENUM列排序时的默认行为是按数字索引进行排序,因此按照ENUM中的元素顺序进行排序。

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

获取这两种行为的一种方法是将该列作为整数外键声明到查找表中,在该表中存储每个允许的字符串。