我将哈希作为 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。