如何将PHP的crc32哈希转换为MySQL等价物?
显然,MySQL的CRC32函数返回一个无符号的BIGINT,而PHP返回十六进制值 在PHP中: 散列'crc32','hello world'==7813f744 在MySQL中: 选择CRC32“hello world”==222957957 PHP CRC32值存储在CHAR8列中 我不知道如何将PHP生成的哈希值转换为MySQL仅使用SQL生成的值。显而易见的事情似乎不起作用: 选择HEXCRC32“hello world”==D4A1185 选择CONV'7813f744',16,10==2014574404如何将PHP的crc32哈希转换为MySQL等价物?,php,sql,hash,Php,Sql,Hash,显然,MySQL的CRC32函数返回一个无符号的BIGINT,而PHP返回十六进制值 在PHP中: 散列'crc32','hello world'==7813f744 在MySQL中: 选择CRC32“hello world”==222957957 PHP CRC32值存储在CHAR8列中 我不知道如何将PHP生成的哈希值转换为MySQL仅使用SQL生成的值。显而易见的事情似乎不起作用: 选择HEXCRC32“hello world”==D4A1185 选择CONV'7813f744',16,1
有什么想法吗?如果您有64位平台,您可以安全地使用PHP中的函数和MySQL中的CRC32。快速测试:
php > echo crc32('foobar') . "\n";
2666930069
MySQL:
>select crc32('foobar');
+-----------------+
| crc32('foobar') |
+-----------------+
| 2666930069 |
+-----------------+
1 row in set (0.00 sec)
可以使用与mysql中返回相同值的包装函数:
function mysql_compatible_crc32($s) {
$r = crc32($s);
if($r<0) {
return 4294967296+$r;
}
return $r;
}
我想你可能需要使用hash'crc32b'。。。。检查这里的第一条评论:正如我所说,我希望在SQL中这样做,而不必在PHP中做任何事情,因为我可能关心的是转换现有数据。我实际上认为我误解了你的问题。我以为你从MySQL和PHP得到了不同的哈希值。让我查一些东西…好的。这两个散列的计算方式不同。MySQL的CRC32使用crc32b多项式生成散列,而PHP的散列'CRC32'。。使用crc32,这是一个不同的多项式,产生一个完全不同的散列。我找不到任何方法在MySQL中生成crc32而不是b。因此,据我所知,您唯一可行的选择是更改PHP端。我明白了:请回答这个问题,我会接受的。谢谢,但问题是如何以编程方式将php crc32转换为mysql等效版本