MySQL への SHA1 ハッシュ値の保存: VARCHAR と BINARY
SHA1 ハッシュの結果を MySQL データベースに保存する場合、適切なフィールドのタイプと長さは慎重に検討する必要があります。一般的な慣例とは異なり、この目的で VARCHAR フィールドを使用するのは非効率的です。
VARCHAR と BINARY
SHA1 ハッシュの長さは常に 160 ビットです。 VARCHAR フィールドは可変長データ用に設計されていますが、フィールドの長さに対して 1 バイトのオーバーヘッドが発生します。したがって、SHA1 ハッシュなどの固定長値に VARCHAR を使用する必要はありません。
バイナリ フィールドは、オーバーヘッドなしでバイナリ データを格納します。これらは、SHA1 ハッシュのような固定長の値に最適です。
文字表現
SHA1 ハッシュは通常、1 文字あたり 4 ビットを使用する 16 進文字列として表されます。 SHA1 ハッシュの 16 進表現を VARCHAR フィールドに格納するには、160/4 = 40 文字が必要です。ただし、バイナリ フィールドは 1 文字あたり 8 ビットを使用するため、同じハッシュを 160/8 = 20 文字のフィールドに格納できます。
推奨アプローチ
です。 MySQL に SHA1 ハッシュ値を保存するには BINARY(20) を使用することをお勧めします。このフィールド タイプにより、VARCHAR に関連するオーバーヘッドが排除され、ハッシュを効率的に保存できるようになります。さらに、UNHEX 関数を使用して、ハッシュをデータベースに保存する前に、ハッシュの 16 進表現をバイナリに変換できます。
ストレージの比較
ストレージ要件の比較SHA1 ハッシュ値を格納するには、BINARY(20) の方が CHAR(40) よりも効率的であることがわかります。たとえば、数百万のレコードの場合、BINARY(20) には約 44.56M のストレージが必要ですが、CHAR(40) には 64.57M のストレージが必要です。この違いは、データセットが大きくなるとさらに顕著になります。
以上がMySQL に SHA1 ハッシュを保存するには: VARCHAR か BINARY?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。