我需要在SQL Server中存储由哈希唯一标识的项目列表。
在C#中,我将哈希计算为项目ID(NULLIF
)的连接的MD5哈希值。
目前,我的哈希在C#中具有数据类型Guid
,在SQL Server中具有byte[]
。
这是DDL:
binary(16)
但也许我会更好:
CREATE TABLE [dbo].[ItemSet](
[GUID] [uniqueidentifier] NOT NULL,
[HashCode] [binary](16) NOT NULL,
[Item1GUID] [uniqueidentifier] NOT NULL,
[Item2GUID] [uniqueidentifier] NOT NULL,
...
[UtcModified] [datetime] NULL,
CONSTRAINT [ItemSet_PK] PRIMARY KEY CLUSTERED
(
[GUID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
[HashCode] [uniqueidentifer] NOT NULL,
也是16个字节,也许SQL Server为uniqueidentifier
提供uniqueidentifier
以上的性能或其他优势?
在C#中,相应的数据类型为binary(16)
,显然从MD5哈希计算时会有一个特殊的Guid
表单:
Type 3 Guid
其中nnnnnnnn-nnnn-3nnn-xnnn-nnnnnnnnnnnn
表示3
,Type 3
字节被屏蔽为x
。
但我不清楚如何创建这样的10xx
。而对于我的目的,它似乎是人造的和不必使用特殊格式的数据类型。
在C#和T-SQL中使用MD5哈希是否有任何最佳/可接受的标准?