2012-10-26 47 views
8

显然MySQL的CRC32()函数返回一个无符号BIGINT,而PHP返回十六进制值。如何将PHP的crc32哈希转换为等价的MySQL?

在PHP:

hash('crc32','hello world') == 7813f744

在MySQL:

SELECT CRC32('hello world') == 222957957

的CRC32的值存储在一个CHAR(8)柱。

我无法弄清楚如何将PHP生成的散列值转换为与MySQL产生的值相同的值,只有SQL。最明显的似乎不工作:

SELECT HEX(CRC32('hello world')) == D4A1185

SELECT CONV('7813f744',16,10) == 2014574404

任何想法?

+0

我想你可能需要使用'哈希( 'crc32b',...)'。这里检查的第一个评论:http://www.php.net/manual/en/function.hash.php#107920 – Aziz

+0

就像我说的,我想这样做在SQL,而不必在PHP中做任何事情,因为我可能担心的是转换现有的数据。 – DanMan

+0

我其实认为我误解了你的问题。我以为你正在从MySQL和PHP获得不同的哈希值。让我看看几件事... – Aziz

回答

2

如果你有64位平台,你可以放心地使用crc32函数在PHP和MySQL中CRC32。快速测试:

php > echo crc32('foobar') . "\n"; 
    2666930069 

的MySQL:

>select crc32('foobar'); 
    +-----------------+ 
    | crc32('foobar') | 
    +-----------------+ 
    |  2666930069 | 
    +-----------------+ 
    1 row in set (0.00 sec) 
+0

谢谢,但问题是如何转换php crc32在mysql等效(编程) – RafaSashi

+0

哦,我明白了。问题不明确 – mente