Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 建议以VARCHAR类型存储UNIQUEIDENTIFIER数据吗?_Sql Server 2008_Sql Server 2008 R2 - Fatal编程技术网

Sql server 2008 建议以VARCHAR类型存储UNIQUEIDENTIFIER数据吗?

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格式存储在同一列中 这样做明智吗 如果您正在谈论的列不被用作主键或索引,那么您将不会有任

我正在使用SQLServer2008R2

在表中,我确实有一列
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列的性能更好


使用nvarchart而不是varchart更大的问题是:为什么该列有多种用途/含义?我同意@MitchWheat:如果该列有两种含义-它实际上应该是两个独立的列(考虑单一责任原则!)-一个
varchar(50)
对于您已经拥有的以及另一个新的
UNIQUEIDENTIFIER
列,用于存储GUIDsI不能为此创建两个saperate列,因为要这样做,我需要在服务器应用程序和几个存储过程中更改大量代码。