>我有一个带有 varchar(64) 字段的数据库表来存储 PHashing 数据,作为 64 个字符(1 和 0 的 ascii 字符)。我需要用测试 hasta 计算汉明距离,似乎最有效的方法是使用 mysql bit_count函数。问题是我还没有找到任何方法来转换/转换/任何哈希字段,以便被解释为字节(8)而不是varchar(64)。喜欢:
> select hash from data;
"0000000101100111111100011110000011100000111100011011111110011011"
> select convert_to_binary(hash) from data;
0b0000000101100111111100011110000011100000111100011011111110011011
我无法更改数据并将所有以前的数据转换为二进制字段。有没有办法强制 mysql 将字段重新解释为文字或任何其他替代解决方案?
我认为你应该能够像这样使用它:
从数据中选择BIT_COUNT(强制转换(哈希为二进制));
使用 CAST 将字段转换为BINARY
并将结果传递给BIT_COUNT
。将字段哈希转换为二进制会将其转换为具有二进制数据类型的字符串,但BIT_COUNT
能够处理它。
工作代码:
SELECT BIT_COUNT( CONV( hash, 2, 10 ) ^
0b0000000101100111111100011110000011100000111100011011111110011011 )