0

ハッシュを 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 として保存するべきではありません。

4

1 に答える 1

1

インデックス付き varchar は実際にはかなりうまく機能しますが、常に 64 ビット値を使用している場合は、 unsigned bigintを使用して同じ結果を達成することもでき、ハッシュ コードの数値表現に簡単に変換できます。

于 2013-11-05T18:47:00.093 に答える