65

SQL Server のさまざまなデータ型に基づいてハッシュが異なることを理解しています。1つはUnicodeをサポートし、もう1つはそうではありません....など(照合も)

データ型として 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代わりに を使用できます。これにより、可変長バイナリ ( ) 列を管理するために必要な (わずかな) オーバーヘッドが削減されます。varbinaryMD5SHA1varbinary

作成するサイズに関しては、次のクエリを実行して、各ハッシュ タイプの長さを確認できます。

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 に答える