簡體   English   中英

在 mysql 中執行按位 xor + bit_count 時遇到問題

[英]Trouble doing a bitwise xor + bit_count in mysql

我正在嘗試對哈希值(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 |
+------------------+-----------------------------------------------------+

CONV返回一個字符串。 您需要將CONV的結果CONVUNSIGNED

MySQL ^運算符僅適用於整數。 它不能用於對字符串(或 blob)進行異或。

如果您的字符串專門表示十六進制整數,則可以在將它們轉換為整數后使用^

SELECT BIT_COUNT(CONV(phash, 16, 10) ^ 0xdda15873a3de013d)
SELECT BIT_COUNT(cast(CONV(phash, 16, 10) as unsigned) ^ 0xdda15873a3de013d)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM