Sql server 2008 建议以VARCHAR类型存储UNIQUEIDENTIFIER数据吗?
我正在使用SQLServer2008R2 在表中,我确实有一列Sql server 2008 建议以VARCHAR类型存储UNIQUEIDENTIFIER数据吗?,sql-server-2008,sql-server-2008-r2,Sql Server 2008,Sql Server 2008 R2,我正在使用SQLServer2008R2 在表中,我确实有一列VARCHAR(50)。我正在同一个数据库中存储一些字母数字数据。数据长度不同,即从用户输入插入 现在,我确实需要将NEWID()-UNIQUEIDENTIFIER类型的数据存储在同一个数据库中。但我已经有了无法修改的现有数据。因此,我没有将列的数据类型从VARCHAR转换为UNIQUEIDENTIFIER而是考虑将NEWID()以VARCHAR格式存储在同一列中 这样做明智吗 如果您正在谈论的列不被用作主键或索引,那么您将不会有任
VARCHAR(50)
。我正在同一个数据库中存储一些字母数字数据。数据长度不同,即从用户输入插入
现在,我确实需要将NEWID()-UNIQUEIDENTIFIER
类型的数据存储在同一个数据库中。但我已经有了无法修改的现有数据。因此,我没有将列的数据类型从VARCHAR
转换为UNIQUEIDENTIFIER
而是考虑将NEWID()
以VARCHAR
格式存储在同一列中
这样做明智吗 - 如果您正在谈论的列不被用作主键或索引,那么您将不会有任何问题-您可以在那里存储任何您想要的内容
- 如果该列已经是索引,甚至是主键,那么您将面临与之前相同的问题(关于您的帖子称数据长度可变)
- 如果在进行此更改时引入了索引或主键,则应考虑为此使用可变长度列可能对性能造成的影响
- 如果上述情况不可避免,一个好的建议是尝试将列的大小减少到36(我认为这是大多数系统和框架生成的唯一标识符的标准长度,包括SQL Server的UNIQUEIDENTIFIER类型,它由5个字母数字实体表示,总共由32个符号组成,用(4)个连字符分隔)
- 如果您的当前数据可以安全地调整为36个符号,我建议在将其作为索引或主键之前重新定义列,尤其是当您的表已经有许多行时
- 如果可能,也可以将其重新定义为CHAR(36)(甚至是注释中建议的NCHAR(36))-固定长度列作为索引的性能更好。此外,MS SQL server 2005及更高版本支持生成顺序ID的功能。这些功能对于索引或PK列的性能更好
varchar(50)
对于您已经拥有的以及另一个新的UNIQUEIDENTIFIER
列,用于存储GUIDsI不能为此创建两个saperate列,因为要这样做,我需要在服务器应用程序和几个存储过程中更改大量代码。