8

显然 MySQL 的 CRC32() 函数返回一个无符号 BIGINT,而 PHP 返回十六进制值。

在 PHP 中:

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

在 MySQL 中:

SELECT CRC32('hello world') == 222957957

PHP CRC32 值存储在 CHAR(8) 列中。

我不知道如何将 PHP 生成的哈希转换为 MySQL仅使用 SQL生成的相同值。显而易见的似乎不起作用:

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

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

有任何想法吗?

4

2 回答 2

2

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

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

MySQL:

  >select crc32('foobar');
  +-----------------+
  | crc32('foobar') |
  +-----------------+
  |      2666930069 |
  +-----------------+
  1 row in set (0.00 sec)
于 2013-12-01T12:37:17.440 回答
0

可以使用返回与 mysql 中相同的值的包装函数:

function mysql_compatible_crc32($s) {
    $r = crc32($s);
    if($r<0) {
        return 4294967296+$r;
    }
    return $r;
}
于 2019-12-26T18:23:50.430 回答