2014-12-04 198 views
0

我有一個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將重新解釋爲作爲字面量的字段,還是其他替代解決方案?

回答

0

工作代碼:

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

我想你應該能夠使用這樣的:

SELECT BIT_COUNT(CAST(哈希AS BINARY))FROM數據;

使用CAST到外地轉換爲BINARY,並將結果傳遞到BIT_COUNT。將字段散列投射到二進制文件會將其轉換爲二進制數據類型的字符串,但BIT_COUNT能夠處理該字符串。

+0

鑄造產生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

相關問題