我有一个带有大量2048位二进制字符串的MySQL数据库(例如'0111001 ... 0101')。我需要的一个计算是这些字符串的汉明距离(在XOR'd结果中的总计数为1)与一些外部生成的位串相比较。为了了解如何编写此查询,我尝试将其编写为较小的位串。这是一个例子:
select BIT_COUNT(bin((b'0011100000') ^ (b'1111111111')))
计算XOR的内部部分正常工作,但BIT_COUNT返回奇怪的结果。此示例返回14,它比字符串本身长。
所以我有几个问题:
首先,为什么BIT_COUNT会返回如此奇怪的结果。它是在字符串上运行而不是我希望它操作的二进制字符串吗?如果是这样,我该如何处理?
其次,请注意我正在通过前缀b来投射(这是正确的词吗?)字符串为二进制。我如何使用列名和变量执行此操作?显然,我不能简单地将b添加到变量名称,并且我不能在它们之间插入空格。有什么想法吗?
谢谢,
编辑: 所以这是第一个问题的解决方案:
select BIT_COUNT(b'0011100000' ^ b'1111111111')
将其用于较大的字符串(2048位)时似乎存在问题。我试过了:
select BIT_COUNT(b'001110...00011')
它给我的结果如28,当实际的bitcount应该在1024左右。如果我删除b,那么它似乎最大值为64.有关如何解决这个问题的任何想法?
答案 0 :(得分:1)
只需删除bin
功能即可。使用它BIN_COUNT
将其参数视为字符串,而不是一组位。所以
select BIT_COUNT(b'0011100000' ^ b'1111111111')
将完成工作