HASHBYTES('MD5', ...)
の結果を保存するのに最適なデータ型は何ですか?
次のように、16バイトのバイナリを出力します。
_0x5CFCD77F9FF836189D2F647EBCEA183E
_
次のデータ型に格納できます。
char(34)
binary(16)
(私は思う-私はここを読む( https://stackoverflow.com/questions/14722305/what-kind-of-datatype-should-one-use-to-store-hashes #1668042 )同じアルゴを使用すると、入力文字列に関係なく毎回同じバイト数を返す必要があること)すべての行には値(nullなし)があり、列は別のテーブルの類似した列との比較に使用されます。
上記のようにHASHBYTES
出力を保存するのに最適なデータ型はどれですか?
固定長のデータ型は結合などでより効率的な場合があるため、binary(16)
vs varbinary(8000)
(HASHBYTES
のデフォルト出力)が最適と思われ、 binary(16)
とvarchar(34)
の方が、使用するストレージ領域が少ないため、より優れています。
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型はお勧めしません。