У меня есть база данных MySQL с большим количеством 2048-битных двоичных строк (например, «0111001 ... 0101»).Одно из вычислений, которое мне понадобится, - это расстояние Хэмминга (общее количество единиц в результате XOR) этих строк по сравнению с некоторыми внешне сгенерированными цепочками битов.Чтобы получить представление о том, как написать этот запрос, я попытался написать его для небольших цепочек.Вот пример:
select BIT_COUNT(bin((b'0011100000') ^ (b'1111111111')))
Внутренняя часть, которая вычисляет XOR, работает правильно, но BIT_COUNT возвращает странные результаты.Этот пример возвращает 14, что длиннее самой строки.
Итак, у меня есть несколько вопросов:
Во-первых, почему BIT_COUNT возвращает такие странные результаты.Работает ли он над строкой, а не над двоичной строкой, над которой я хотел бы работать?Если да, то как мне справиться с этим?
Во-вторых, обратите внимание, что я приведу (это правильное слово здесь?) Строки в двоичном виде, добавив b.Как бы я сделал это с именами столбцов и переменных?Очевидно, я не могу просто добавить ab к имени переменной и не могу вставить пробел между ними.Есть идеи?
Спасибо,
РЕДАКТИРОВАТЬ: Итак, вот решение первой проблемы:
select BIT_COUNT(b'0011100000' ^ b'1111111111')
Кажется, есть проблема при использовании этого для больших строк (2048 бит).Я попытался:
select BIT_COUNT(b'001110...00011')
, и это дает мне результаты, например, 28, когда фактическое число битов должно быть около 1024. Если я удаляю b, то кажется, что оно достигает максимального значения в 64. Любые идеи о том, какрешить эту проблему?