BIT_COUNT (hash1 ^ hash2) интерпретирует результат hash1 ^ hash2 как строку - PullRequest
0 голосов
/ 20 декабря 2018

Итак:

b'1010 '^ b'0000' = 1010

, если я сделаю: BIT_COUNT(b'1010' ^ b'0000') Я получу правильный результат (2)

Ноесли я выбираю те же значения из таблицы (двоичные поля) BIT_COUNT(hash1 ^ hash2), я получаю неправильный результат

Даже если я сделаю поля шестнадцатеричными в таблице и попытаюсь привести их к двоичным значениям, а затем посчитать биты,Я все еще получаю тот же неправильный результат:

BIT_COUNT(CONV(hex_hash1, 16, 2) ^ CONV(hex_hash2, 16, 2))

Еще один пример странного поведения, если я делаю следующий запрос:

SELECT 
    BIT_COUNT(CONV('b', 16, 2) ^ CONV('d', 16, 2))

Я получаю 9 в результате, когда это должно 'я был 2. Из того, что я вижу, результат обрабатывается как строка, я пробовал CAST (), CONV () и так далее, и ничего из этого не работает.

Кто-нибудь знает почему?

(здесь мое окружение)

'innodb_version', '5.7.23'
'protocol_version', '10'
'slave_type_conversions', ''
'tls_version', 'TLSv1,TLSv1.1,TLSv1.2'
'version', '5.7.23-log'
'version_comment', 'Source distribution'
'version_compile_machine', 'x86_64'
'version_compile_os', 'Linux'
...