2010-09-10 28 views
2

Je suis en cours d'exécution de ce code d'exemple que je trouve tout googler:MD5 (RAND()) sur MySQL retour que des chiffres

SELECT MD5(RAND()) 

Mais, à ma grande surprise, MD5 revient chiffres simples, au lieu de chiffres hexadécimaux. L'utilisation de CONV(MD5(RAND()), 10, 16) semble résoudre mon problème, mais la documentation de MySQL indique que la fonction MD5 doit retourner une chaîne déjà en hexadécimal.

Est-ce que je fais quelque chose de mal?

EDIT2: Ce problème semble uniquement exister avec phpMyAdmin, pas la version en ligne de commande de MySQL.

EDIT: Ma version MySQL:

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

Un exemple de valeur MD5:

6338666264663132376461666163313063656535633666616266396530613335 

En outre, CONV retourne une chaîne très très court, comme:

B9 

Cette chaîne est souvent à un seul chiffre et le plus long que j'ai eu jusqu'à maintenant était de 5 chiffres.

+0

@Gumbo Alors qu'est-ce qu'un '9' fait au milieu de ça? – luiscubal

+0

Oui, j'avais tort. Et avec une longueur de 64, il serait plutôt base 4 pour obtenir le 128 bit de MD5. Est-ce vraiment juste une valeur MD5? – Gumbo

Répondre

3

Peu importe, je l'ai compris. PhpMyAdmin est en train de lire le résultat en tant que binaire.

Il semble y avoir une option "Afficher les contenus binaires en HEX" qui est cochée par défaut.

Il semble que cette option "Afficher en hexadécimal" cause les problèmes. Décocher ça semble le résoudre.

0

La documentation de MySQL suggère que le résultat devrait être une chaîne ou NULL n'importe quoi. À une estimation, cela pourrait-il se produire parce que l'argument de MD5() est un nombre? Que se passe-t-il si vous utilisez SELECT MD5(CONCAT(RAND(), ''))?

+0

Rien ne change avec CONCAT. – luiscubal

+0

J'ai mis les appels de fonction dans le mauvais ordre, répondre édité. – Hammerite

+0

Encore une fois, phpMyAdmin affiche en décimal. La version de ligne de commande renvoie un résultat correct. – luiscubal