将GUID存储为UNIQUEIDENTIFIER有什么好处吗?

时间:2014-06-26 07:23:26

标签: sql-server

我的代码将此作为表中列的默认值:

 [QuestionUid]      UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL,

将它作为UNIQUEIDENTIFIER,我想这是正确的方法,但如果我将它存储为VARCHAR(50)该怎么办。这使得在使用我的C#代码时更简单,因为我现在遇到一些关于类型不匹配的错误。

3 个答案:

答案 0 :(得分:0)

uniqueidentifier数据类型用于合并replcation,其中ROWGUIDCOL属性被分配给此数据类型的列。这样就可以在数据库服务器之间合并数据时消除行重复。

可以使用varchar(50)... char(36)数据类型,因为在合并复制时,如果没有具有uniqueidentifier数据类型的列,SQL Server将使用此数据类型添加自己的列

唯一的问题可能是该表会有两列uniqueidentifiers!如果在合并复制点将数据类型更改为uniqueidentifier,则可以避免这种情况。然后SQL Server可以将ROWGUIDCOL分配给此列。

这对您的C#项目并不一定有帮助,但是尝试使C#项目与uniqueidentifier一起工作可能会更加困难。我不知道C#,但我确信它必须具备解决这个问题的便利。

答案 1 :(得分:0)

你的桌子有多大?我问,因为UNIQUEIDENTIFIER只需要16个字节,而你的varchar(50)会占用更多。虽然我们在谈论这个,为什么varchar(50)? guid将始终具有相同的长度,因此根本不需要可变长度; char(40)会做得很好。无论哪种方式,您占用的空间都是错误数据类型的两倍。这是浪费在缓冲池中的所有空间,必须在索引维护期间进行维护,浪费在涉及此列的每个索引中等等。那么你能做到吗?当然。我会这样做吗?没有。

答案 2 :(得分:0)

Guid(uniqueidentifier)是128位数。它可以像其他数字类型一样轻松编入索引(int / bigint / etc ...)。

将GUID存储为varchar(50)是错误的决定,例如将整数存储在varchar中。