2013-03-06 1 views
2

У меня возникает странная проблема с двумя запросами, возвращающими разные значения хэша для CRC32 с той же строкой.MySQL возвращает разные значения для CRC32() с той же строкой

Если я бегу:

SELECT 'http://mywebsite4.com/myvideos', CRC32('http://mywebsite4.com/myvideos');

В хэш-значения возвращенные 3769016377.

Если я затем запустить

INSERT INTO locations (full_url, full_url_hash) VALUES ('http://mywebsite4.com/myvideos', CRC32('http://mywebsite4.com/myvideos'))

хэш-значения, вставленные являются 2147483647.

Есть ли что-то очевидное, что я здесь отсутствует? Насколько я понимаю, функция CRC32 всегда должна иметь равные строки равными 32-битным целым, я не могу в жизни понять, почему они в этом случае разные.

Спасибо!

ответ

7

Измените тип данных столбца на INT UNSIGNED. Причина в том, что вы используете SIGNED INT, поэтому максимальное значение - только 2147483647.

CREATE TABLE tableNAME 
(
    full_url_hash INT UNSIGNED 
    -- other columns 
) 
+0

Ах классический. Спасибо. – cmwright

+0

приветствуется ': D' –

Смежные вопросы