我已經把一個PHP函數如下:爲什麼PHP base_convert會給同一個MYSQL函數一個不同的結果?
function keyword_hash($keyword) {
return base_convert(substr(md5($keyword), -16), 16, 10);
}
此功能的目的是產生,我可以在數據庫中存儲一個數字的哈希值,並使用了一個查找表(而不是試圖索引關鍵字列)。
在MySQL這個函數的等效如下:
SELECT CONV(RIGHT(MD5('some keyword'), 16), 16, 10);
我驗證過MD5字符串是一樣的,和SUBSTR()我回來從RIGHT()的值在匹配MySQL查詢。但是,當我運行CONV()時,我得到了與base_convert()生成的值不同的值。
例如,使用keyword_hash("some keyword")
會生成值10923672322315740844.但是,使用SELECT CONV(RIGHT(MD5('some keyword'), 16), 16, 10)
會生成10923672322315740475,它顯示最後三個數字不同。
缺少什麼我在這裏?它們不應該產生相同的價值嗎?
[php.net](http://fr2.php.net/manual/en/function.base-convert.php)> base_convert()可能會因爲屬性而失去大數精度與使用的內部「double」或「float」類型有關。請參閱手冊中的浮點數部分以獲取更多具體信息和限制。 – MarcDefiant
爲什麼不試圖用另一種方式來實現數字散列? –
@Mogria Spot on,那是一個很大的幫助,並指出我對這個評論的方向http://fr2.php.net/manual/en/function.base-convert.php#109660,它有一個很棒的功能更精確。剛剛測試過它,並返回相同的值。添加您的評論作爲答案,我會將其標記爲正確。 –