我有一个db表,其中有一个varchar(64)字段来存储PHashing数据,如64个字符(1和0的ASCII字符)。我需要用测试hasta来计算汉明距离,并且似乎最有效的方法是使用mysql bit_count函数。问题是,我还没有找到任何方法来转换/ cast /散列字段,以便将解释为作为字节(8)而不是varchar(64)。像:Mysql将varchar二进制表示字段转换为二进制以执行海明距离计算bit_count
> select hash from data;
"0000000101100111111100011110000011100000111100011011111110011011"
> select convert_to_binary(hash) from data;
0b0000000101100111111100011110000011100000111100011011111110011011
我不能改变数据并将所有以前的数据转换成二进制字段。有没有办法强制mysql将重新解释为作为字面量的字段,还是其他替代解决方案?
铸造产生64字节的数据,所以我不能对64位文字进行比较。我也可以将字符串从字符串转换为二进制,但它会产生错误的结果。例如,**选择bit_count(cast(“011”作为二进制)^ cast(“111”作为二进制))**返回3并且**选择bit_count(cast(“101”作为二进制)^ cast(“111”作为二进制))**返回2.如果您使用二进制数据执行此操作,则答复是正确的,并且始终为1:** select_bit_count(0b101^0b111)**,** select bit_count(0b011^0b111)** – sucotronic 2014-12-05 11:35:49