ハッシュを type としてテーブルに保存しますbit(64)
。これらのハッシュ レコードの一部は、select
.
説明:
コマンドを使用して各ハッシュをDBに挿入します
insert into hashes (id, hash) values (0, 0xad66f2f8f3815456);
次に、レコードを取得します
select id from hashes where hex(hash) = 'ad66f2f8f3815456';
+------+
| id |
+------+
| 0 |
+------+
これは、ハッシュがゼロで埋められていない限り機能します。
insert into hashes (id, hash) values (1, 0x0d66f2f8f3815456);
select id from hashes where hex(hash) = '0d66f2f8f3815456';
Empty set (0.00 sec)
代わりに ID を照合してレコードを取得すると、次のようになります。
select id, hex(hash) from hashes where id = 1;
+------+-----------------+
| id | hex(hash) |
+------+-----------------+
| 1 | D66F2F8F3815456 |
+------+-----------------+
そのため、パディングゼロに関係なく、保存されたハッシュとプロンプトされたハッシュとの間で数値を一致させることができないと思います。私が使用しているテーブルは次のとおりです。
describe hashes;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(4) | YES | | NULL | |
| hash | bit(64) | YES | MUL | NULL | |
+-------+---------+------+-----+---------+-------+
これはどのように解決できますか?これは、数値比較を必要とする 64 ビット ハッシュのレコードを処理する適切な方法ですか? これらのレコードは数千あるので、面倒な varchar として保存するべきではありません。