首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP Murmurhash3和MySql Murmurhash3有时不匹配

PHP Murmurhash3和MySql Murmurhash3有时不匹配
EN

Stack Overflow用户
提问于 2016-09-22 12:15:21
回答 1查看 706关注 0票数 3

我使用Murmurhash3为文本条目创建唯一的散列。在创建文本条目时,我使用这个php实现 (它返回一个32位散列整数)来获取哈希值。散列存储在二进制(16)数据库列中。我还需要更新我们现有的数据库,所以我使用这个MySql实现来更新数据库。为了匹配php创建的散列,我将对其进行基本转换并降低其大小写。

代码语言:javascript
复制
UPDATE column SET hash=LOWER(CONV(murmur_hash_v3(CONCAT(column1, column2), 0), 10, 32));

它大约有80%的时间与php版本相匹配,这显然不会削减它。例如,哈希字符串'engtest‘在php中创建15d15m,在MySql中创建3uqiuqa。但是,字符串'engtest语句‘在两个字符串中都会创建相同的散列。我做错什么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-23 02:20:28

弄明白了。PHP的整数类型是有符号的,并且有时候Murmurhash会产生与总是正的MySql值不匹配的负散列值。解决方案是在基本转换之前使用sprintf格式化php的散列值,格式设置为"%u“。

代码语言:javascript
复制
$hash = murmurhash3_int($text);

return base_convert(sprintf("%u\n", $hash), 10, 32);

有关更多信息,请参见php crc32文档

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39638805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档