2010-09-10 3 views
2

Я бегу этот пример кода я нашел, а прибегая к помощи:MD5 (RAND()) на MySQL возвращения только цифры

SELECT MD5(RAND()) 

Но, к моему удивлению, MD5 возвращает простые цифры, вместо шестнадцатеричных цифр. Использование CONV(MD5(RAND()), 10, 16), похоже, решает мою проблему, но в документации по MySQL говорится, что функция MD5 должна возвращать строку уже в шестнадцатеричном формате.

Я что-то не так?

EDIT2: Эта проблема существует только в phpMyAdmin, а не в командной строке MySQL.

EDIT: Моя MySQL версия:

mysql --version 
mysql Ver 14.14 Distrib 5.1.41, for debian-linux-gnu (x86_64) using readline 6.1 

Пример значение MD5:

6338666264663132376461666163313063656535633666616266396530613335 

Кроме того, CONV возвращает очень очень короткую строку, как:

B9 

Эта строка часто однозначный и самый длинный, который я получил до сих пор, составлял 5 цифр.

+0

@Gumbo Тогда что такое «9», сделанное посередине этого? – luiscubal

+0

Да, я был неправ. И с длиной 64 он скорее будет базой 4, чтобы получить 128 бит MD5. Это действительно только одно значение MD5? – Gumbo

ответ

3

Ничего, я понял.

Как-то phpMyAdmin читает результат как двоичный. Кажется, есть опция «Показывать двоичное содержимое как HEX», которое по умолчанию проверено.

Похоже, что это «показать как шестнадцатеричный» вариант вызывает проблемы. Устранение этого вопроса, похоже, решит его.

0

Документация MySQL предполагает, что результат должен быть строкой или NULL независимо от того, что. Возможно, это может случиться, потому что аргумент MD5() - это число? Что произойдет, если вы используете SELECT MD5(CONCAT(RAND(), ''))?

+0

Ничего не меняется с CONCAT. – luiscubal

+0

Я положил вызовы функций в неправильном порядке, отредактировал ответ. – Hammerite

+0

Опять же, phpMyAdmin показывает десятичное число. Версия командной строки возвращает правильный результат. – luiscubal

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