1. ホーム
  2. mysql

[解決済み] MySQLにSHA1ハッシュ値を保存する

2022-04-30 14:54:22

質問内容

SHA1ハッシュの結果をMySQLデータベースに格納したいときに発生した簡単な質問があります。

はどれくらいの長さにすべきでしょうか? VARCHAR フィールドにハッシュの結果を格納することができますか?

どのように解決するのですか?

私なら VARCHAR は可変長データ用ですが、固定長データ用ではありません。なぜなら、SHA-1 値は 常に 160ビット長であるため VARCHAR が無駄になるだけです。 固定長フィールドの長さ分の1バイトを追加したものです。 .

そして、私は SHA1 が返してくる。なぜなら、1文字あたり4ビットしか使っていないので、160/4=40文字が必要になるからです。しかし、1文字あたり8ビットを使うなら、160/8 = 20文字の長いフィールドが必要になるだけです。

そこで、おすすめなのが BINARY(20) とのことです。 UNHEX 機能 を変換する必要があります。 SHA1 の値をバイナリに変換する。

のストレージ要件を比較しました。 BINARY(20)CHAR(40) .

CREATE TABLE `binary` (
    `id` int unsigned auto_increment primary key,
    `password` binary(20) not null
);
CREATE TABLE `char` (
    `id` int unsigned auto_increment primary key,
    `password` char(40) not null
);

100万枚のレコードを持つ binary(20) は44.56M、一方 char(40) は64.57Mを取ります。 InnoDB エンジンです。