0

我正在尝试对哈希值(16 个字符的十六进制字符串)进行比较。我有一个 MYSQL 表,它用一phash VARCHAR(16)列存储这些值。这就是我想要做的:

SELECT phash, bit_count(phash ^ x'dda15873a3de013d') FROM mytable;

但是 bit_count + xor 没有正确完成。即使phash='dda15873a3de013d'我得到33了我应该得到的结果0(两个十六进制是相同的,所以异或应该只产生零,因此 bit_count 为 0。

怎么了?谢谢

编辑:这里的例子=> http://sqlfiddle.com/#!9/d7f5c2/1/0

mysql> SELECT phash,BIT_COUNT(CONV(phash, 16, 10) ^ 0xdda15873a3de012d) from mytable limit 1;

+------------------+-----------------------------------------------------+
| phash            | BIT_COUNT(CONV(phash, 16, 10) ^ 0xdda15873a3de012d) |
+------------------+-----------------------------------------------------+
| dda15873a3de012d |                                                  33 |
+------------------+-----------------------------------------------------+
4

3 回答 3

1

CONV返回一个字符串。您需要将结果转换为CONVto UNSIGNED

于 2017-12-05T18:44:28.950 回答
0
SELECT BIT_COUNT(cast(CONV(phash, 16, 10) as unsigned) ^ 0xdda15873a3de013d)
于 2020-07-09T09:02:23.473 回答
0

MySQL^运算符仅适用于整数。它不能用于相互异或字符串(或 blob)。

如果您的字符串专门表示十六进制整数,则可以^在将它们转换为整数后使用:

SELECT BIT_COUNT(CONV(phash, 16, 10) ^ 0xdda15873a3de013d)
于 2016-04-17T19:55:12.933 回答