8

どうやら MySQL の CRC32() 関数は符号なしの BIGINT を返しますが、PHP は 16 進数値を返します。

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 に答える