0

我有一个 MySQL 数据库,其中包含大量 2048 位二进制字符串(例如 '0111001...0101')。我需要的一个计算是这些字符串与一些外部生成的位串相比的汉明距离(异或结果中 1 的总数)。为了了解如何编写此查询,我尝试为较小的位串编写它。这是一个例子:

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 处达到最大值。关于如何解决这个问题的任何想法?

4

1 回答 1

1

只需删除bin功能。它将BIN_COUNT其参数视为字符字符串,而不是一组位。所以

select BIT_COUNT(b'0011100000' ^ b'1111111111')

会做的工作

于 2011-11-29T03:05:22.680 回答