2012-10-26 7 views
8

Apparentemente la funzione CRC32() di MySQL restituisce un BIGINT non firmato, mentre PHP restituisce il valore esadecimale.Come convertire l'hash crc32 di PHP nell'equivalente MySQL?

In PHP:

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

In MySQL:

SELECT CRC32('hello world') == 222957957

Il valore CRC32 viene memorizzato in un CHAR (8) colonna.

Non riesco a capire come trasformare l'hash generato da PHP nello stesso valore che MySQL produce con solo SQL. L'ovvio non sembra funzionare:

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

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

Tutte le idee?

+0

penso che potrebbe essere necessario usare 'hash ('crc32b', ...)'. Controlla il primo commento qui: http://www.php.net/manual/en/function.hash.php#107920 – Aziz

+0

Come ho detto, mi piacerebbe farlo in SQL senza dover fare nulla in PHP, dal momento che la mia preoccupazione potrebbe essere la conversione dei dati esistenti. – DanMan

+0

In realtà penso di aver frainteso la tua domanda. Pensavo che stavi ottenendo diversi hash da MySQL e PHP. Fammi vedere alcune cose ... – Aziz

risposta

2

Se si dispone di una piattaforma 64 bit, è possibile utilizzare in modo sicuro la funzione crc32 in PHP e CRC32 in MySQL. Test rapido:

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

MySQL:

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

Grazie, ma la domanda è come convertire php crc32 in equivalente mysql (programmaticamente) – RafaSashi

+0

Oh capisco. La domanda non era chiara a riguardo – mente