web-dev-qa-db-ja.com

HASHBYTES( 'MD5'、...)の結果を格納するのに最適なデータ型

HASHBYTES('MD5', ...)の結果を保存するのに最適なデータ型は何ですか?

次のように、16バイトのバイナリを出力します。

_0x5CFCD77F9FF836189D2F647EBCEA183E
_

次のデータ型に格納できます。

すべての行には値(nullなし)があり、列は別のテーブルの類似した列との比較に使用されます。

上記のようにHASHBYTES出力を保存するのに最適なデータ型はどれですか?

固定長のデータ型は結合などでより効率的な場合があるため、binary(16) vs varbinary(8000)HASHBYTESのデフォルト出力)が最適と思われ、 binary(16)varchar(34)の方が、使用するストレージ領域が少ないため、より優れています。

7
GWR

Books Online によると:

出力はアルゴリズム標準に準拠しています。MD2、MD4、およびMD5の場合は128ビット(16バイト)。 SHAおよびSHA1の場合は160ビット(20バイト)、SHA2_256の場合は256ビット(32バイト)、SHA2_512の場合は512ビット(64バイト)。

したがって、関数が技術的にvarbinary(8000)を返すという事実にもかかわらず、MD5では16バイトしか得られません。 MD5のみが必要であると完全に確信している場合は、binary(16)がそれを行います。安全にプレイし、HASHBYTESが処理できる可能なアルゴリズム(現在または将来)を許可する場合は、varbinary(8000)を使用してください。

文字列変換オーバーヘッドと不要なストレージオーバーヘッドが含まれるため、char型はお勧めしません。

8
db2