首页 > 解决方案 > BIT_COUNT(hash1^hash2) 将 hash1^hash2 的结果解释为字符串

问题描述

所以:

b'1010' ^ b'0000' = 1010

如果我这样做: BIT_COUNT(b'1010' ^ b'0000')我得到正确的结果 (2)

但是,如果我从表中选择相同的值(二进制字段) BIT_COUNT(hash1 ^ hash2),我会得到错误的结果

即使我将表中的字段设为十六进制并尝试将它们转换为二进制然后计算位,我仍然得到相同的错误结果:

BIT_COUNT(CONV(hex_hash1, 16, 2) ^ CONV(hex_hash2, 16, 2))

另一个奇怪行为的例子,如果我执行以下查询:

SELECT 
    BIT_COUNT(CONV('b', 16, 2) ^ CONV('d', 16, 2))

结果我得到了 9,而它应该是 2。从​​我可以看到结果被处理为字符串,我尝试了 CAST()、CONV() 等等,但都不起作用。

有谁知道为什么?

(这是我的环境)

'innodb_version', '5.7.23'
'protocol_version', '10'
'slave_type_conversions', ''
'tls_version', 'TLSv1,TLSv1.1,TLSv1.2'
'version', '5.7.23-log'
'version_comment', 'Source distribution'
'version_compile_machine', 'x86_64'
'version_compile_os', 'Linux'

标签: mysqlsqlbinaryhex

解决方案


推荐阅读