代码之家  ›  专栏  ›  技术社区  ›  matt.mercieca

SQL Server 2005是否具有与MySql的ENUM数据类型等效的数据类型?

  •  28
  • matt.mercieca  · 技术社区  · 17 年前

    我正在做一个项目,我想在表中存储一些易于枚举的信息。MySql的枚举数据类型完全符合我的要求: http://dev.mysql.com/doc/refman/5.0/en/enum.html SQL Server 2005中是否有相应的版本?

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

    2 回复  |  直到 17 年前
        1
  •  24
  •   Sk8erPeter miku    14 年前

    这对你有用吗?

    来自 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'
    
        2
  •  17
  •   Bill Karwin    17 年前

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

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

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