Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将PHP的crc32哈希转换为MySQL等价物?_Php_Sql_Hash - Fatal编程技术网

如何将PHP的crc32哈希转换为MySQL等价物?

如何将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

显然,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


有什么想法吗?

如果您有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等效版本