【发布时间】:2016-04-17 19:46:09
【问题描述】:
我正在尝试对哈希值(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 |
+------------------+-----------------------------------------------------+
【问题讨论】:
-
为我工作:sqlfiddle.com/#!9/9eecb7d/54806。
phash有什么数据类型? -
如果值为 HEX,则应首先为该列使用适当的数据类型。
-
什么类型?我从 mysql 文档中得到的是表没有 HEX 数据类型,所以我需要将它们存储为字符串或 varchar
-
sqlfiddle.com/#!9/d7f5c2/20。你可以使用
bit_count(hex('dda15873a3de013d') ^ hex(phash)