ホームページ  >  記事  >  データベース  >  MySQL に SHA1 ハッシュを保存するには: VARCHAR か BINARY?

MySQL に SHA1 ハッシュを保存するには: VARCHAR か BINARY?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-23 22:33:14480ブラウズ

To Store a SHA1 Hash in MySQL: VARCHAR or BINARY?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。