【问题标题】:Mysql convert varchar binary representation field to binary to do hamming distance calculation with bit_countMysql将varchar二进制表示字段转换为二进制以使用bit_count进行汉明距离计算
【发布时间】:2014-12-11 20:50:24
【问题描述】:

我有一个带有 varchar(64) 字段的 db 表来存储 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 将字段重新解释作为文字,或任何其他替代解决方案?

【问题讨论】:

    标签: mysql string binary hamming-distance bitcount


    【解决方案1】:

    我认为你应该可以这样使用它:

    从数据中选择 BIT_COUNT(CAST(hash AS BINARY));

    使用CAST 将字段转换为BINARY 并将结果传递给BIT_COUNT。将字段哈希转换为二进制会将其转换为二进制数据类型的字符串,但BIT_COUNT 能够处理。

    【讨论】:

    • 铸造产生一个 64 字节的数据,所以我无法将它与 64 位文字进行比较。我也可以将文字从字符串转换为二进制,但会产生错误的结果。例如,select bit_count(cast("011" as binary)^cast("111" as binary)) 返回 3 并且 select bit_count(cast("101" as binary)^cast ("111" as binary)) 返回 2。如果对二进制数据执行此操作,则回复正常,并且始终为 1:select bit_count(0b101^0b111), 选择 bit_count(0b011^0b111)
    【解决方案2】:

    工作代码:

    SELECT BIT_COUNT( CONV( hash, 2, 10 ) ^ 
    0b0000000101100111111100011110000011100000111100011011111110011011 )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 2011-06-14
      • 2015-12-20
      • 2017-04-03
      • 1970-01-01
      • 2012-06-17
      • 2016-09-21
      相关资源
      最近更新 更多