65

我知道哈希会根据 SQL Server 中的不同数据类型而有所不同。一个支持 Unicode,另一个不支持 .... 依此类推(也是排序规则)

我使用 char(32) 作为数据类型,但输出很奇怪。使用这个

select HASHBYTES('MD5','MD5Text')

给出这个输出:

0xA891DB2DA259280A66FD5F35201CAB6A

什么时候

declare @h char(32)
select @h=HASHBYTES('MD5','MD5Text')
select @h,LEN(@h)

输出:

Ё'Ы-ўY( fэ_5 «j

所以我是 SQL Server 的新手。
谁能告诉我应该使用什么数据类型来存储哈希?

4

1 回答 1

151

您应该使用binary数据类型。您可以使用binary而不是,varbinary因为散列函数将始终为相同类型的散列(例如,等)返回相同数量的MD5字节SHA1。这将减少管理可变长度二进制 ( varbinary) 列所需的(少量)开销。

就制作它的大小而言,您可以运行此查询来检查每种散列类型的长度:

SELECT  DATALENGTH(HASHBYTES('MD2', 'Testing')) AS [MD2Length],
        DATALENGTH(HASHBYTES('MD4', 'Testing')) AS [MD4Length],
        DATALENGTH(HASHBYTES('MD5', 'Testing')) AS [MD5Length],
        DATALENGTH(HASHBYTES('SHA', 'Testing')) AS [SHALength],
        DATALENGTH(HASHBYTES('SHA1', 'Testing')) AS [SHA1Length],
        /* 2012 only: */
        DATALENGTH(HASHBYTES('SHA2_256', 'Testing')) AS [SHA2_256Length],
        DATALENGTH(HASHBYTES('SHA2_512', 'Testing')) AS [SHA2_512Length];

它应该是这样的:

MD2Length MD4Length MD5Length SHALength SHA1Length SHA2_256Length SHA2_512Length
--------- --------- --------- --------- ---------- -------------- --------------
16        16        16        20        20         32             64
于 2013-05-21T22:17:29.433 回答