比较MySQL中的二进制值

比较MySQL中的二进制值,mysql,binary,bitcount,Mysql,Binary,Bitcount,假设你有两个二进制值 001011 001111 如何获得MySQL中的不同位数?我试过了 选择位计数(二进制001011^二进制001111) 这将返回6,而我需要一个在本例中返回1的解决方案。它将数字1011和1111(以10为基数)转换为二进制并进行比较。如果您这样做了: SELECT BIT_COUNT( CONV( '001011', 2, 10 ) ^ CONV( '001111', 2, 10 ) ) SELECT BIT_COUNT(11 ^ 15) 它会起作用。实际上,

假设你有两个二进制值

001011
001111
如何获得MySQL中的不同位数?我试过了

选择位计数(二进制001011^二进制001111)

这将返回6,而我需要一个在本例中返回1的解决方案。

它将数字1011和1111(以10为基数)转换为二进制并进行比较。如果您这样做了:

SELECT BIT_COUNT( CONV( '001011', 2, 10 ) ^ CONV( '001111', 2, 10 ) )
SELECT BIT_COUNT(11 ^ 15)

它会起作用。

实际上,前导的0使MySQL将其视为八进制数。对于大型二进制字符串如何?它似乎在2^16左右结束。我不知道mysql将0nnn转换为八进制。谢谢你的启发。大的二进制字符串怎么样?它的上限似乎在2^16左右。我使用的是MySql 5.1,它似乎没有上限
SELECT CONV('11111111111111111111111111111',2,10)
按预期返回
4294967295
。我正在尝试这个例子:选择位计数(CONV(1111111110011111000000000011100000011011001111011010100,2,10)^CONV(111111111 01111100000 010001110010010000 110 100100000 110010000,2, 10))(在中间某个地方有两个比特不同,但它返回0)再次感谢。@Sheqel在做了一些测试之后,我发现有一个63位的限制,我想它与符号位有关。顺便说一句,将第一个参数放在引号之间,否则它将被解释为base10数字。
SELECT BIT_COUNT(11 ^ 15)