gpt4 book ai didi

mysql - 在 MySQL 中对大位字符串执行按位运算?

转载 作者:行者123 更新时间:2023-11-29 14:39:19 26 4
gpt4 key购买 nike

我有一个 MySQL 数据库,其中包含大量 2048 位二进制字符串(例如“0111001...0101”)。我需要的一项计算是这些字符串与某些外部生成的位串相比的汉明距离(异或结果中 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 这样的结果,而实际位数应该在 1024 左右。如果我删除 b,那么它看起来最大为 64。关于如何解决这个问题有什么想法吗?

最佳答案

只需删除 bin 函数即可。使用它,BIN_COUNT 将其参数视为字符串,而不是一组位。所以

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

会做工作

关于mysql - 在 MySQL 中对大位字符串执行按位运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8305286/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com