0

我将哈希作为 type 存储在表上bit(64)。其中一些哈希记录无法通过直接匹配它们来检索select

解释:

我使用命令在数据库中插入每个哈希

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 位哈希记录的正确方法吗?我有几千条这样的记录,所以它们不应该被存储为繁琐的 varchars。

4

1 回答 1

1

索引 varchars 实际上工作得很好,但如果您始终使用 64 位值,您也可以通过使用unsigned bigint来获得相同的结果,并且可以轻松转换为哈希码的数字表示。

于 2013-11-05T18:47:00.093 回答