0

ハッシュ値 (16 文字の 16 進文字列) を比較しようとしています。phash VARCHAR(16)これらの値を列に格納する MYSQL テーブルがあります。これは私がやろうとしていることです:

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

しかし、bit_count + xor は正しく行われません。取得する必要があるのに結果としてphash='dda15873a3de013d'取得する場合でも(2 つの 16 進数は同じであるため、xor はゼロのみを生成する必要があるため、bit_count は 0.330

なにが問題ですか?ありがとうございました

編集:ここに例=> 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

0

MySQL^オペレーターは整数に対してのみ機能します。文字列 (またはブロブ) を相互に XOR するために使用することはできません。

文字列が明確に16 進数^の整数を表している場合は、それらを整数に変換した後に使用できます。

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