是否建议将VARIQUEIDENTIFIER数据存储在VARCHAR类型中?

时间:2013-12-02 10:27:26

标签: sql-server-2008 sql-server-2008-r2

我正在使用SQL Server 2008 R2。

在表格中,我有一个VARCHAR(50)类型的列。我正在存储一些字母数字数据。数据具有不同的长度,即从用户输入插入。

现在,我确实需要在同一个数据中存储NEWID() - UNIQUEIDENTIFIER类型的数据。但我已经存在无法修改的现有数据。因此,我不是将列的数据类型从VARCHAR转换为UNIQUEIDENTIFIER,而是考虑在同一列中以NEWID()格式存储VARCHAR

建议这样做吗?

1 个答案:

答案 0 :(得分:0)

  • 如果您所说的专栏不是用作主键或索引,那么您就不会有任何问题 - 您可以随意存储。

  • 如果该列已经是索引甚至主键,您将遇到相同的问题(关于您的帖子说数据的长度可变)

  • 如果在进行此更改时引入索引或主键,则应考虑使用可变长度列对此可能产生的性能影响。

    • 如果以上是不可避免的,那么一个好的建议就是尝试将列的大小减小到36(我认为这是大多数系统和框架生成的唯一标识符的标准长度,包括UNIQUEIDENTIFIER类型的SQL Server,通过5个字母数字实体表示,完全由用(4)连字符分隔的32个符号组成。

    • 如果当前数据的大小可以安全地设置为36个符号,我建议重新定义之前的列,使其成为索引或PK,尤其是如果您的表已经有很多行。

    • 如果可能的话,还要将其重新定义为CHAR(36)(或者甚至是评论中建议的NCHAR(36)) - 固定长度列作为索引表现更好。此外,MS SQL Server 2005及更高版本支持NEWSEQUENTIALID()函数以生成顺序ID。这些对索引或PK列表现更好。