2010-09-10 71 views
2

我运行这个样本代码,我发现谷歌搜索时:不是十六进制数字MD5(RAND())上的MySQL只返回数字

SELECT MD5(RAND()) 

但是,令我吃惊的是,MD5是返回纯数字。 使用CONV(MD5(RAND()), 10, 16)似乎解决我的问题,但MySQL的文档指出MD5函数应该以十六进制已经返回一个字符串。

我做错了什么?

EDIT2:这个问题只出现与phpMyAdmin,MySQL的不的命令行版本存在。

编辑:我的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 2010-09-10 14:56:44

+0

是的,我错了。而长度为64的则是基地4获得MD5的128位。这真的只是一个MD5值吗? – Gumbo 2010-09-10 15:00:47

回答

3

没关系,我理解了它。

不知何故,phpMyAdmin是读取结果作为二进制。 似乎有一个选项“显示二进制内容HEX”这是默认选中。

看来,这场“秀为十六进制”选项造成的问题。取消它似乎解决了它。

0

MySQL文档确实表明,其结果应该是一个字符串或NULL不管。猜测,这是否会发生,因为MD5()的参数是一个数字?如果你使用SELECT MD5(CONCAT(RAND(), ''))会发生什么?

+0

没什么用CONCAT变化。 – luiscubal 2010-09-10 15:02:05

+0

我把函数调用顺序错误,编辑回答。 – Hammerite 2010-09-10 15:02:44

+0

同样,示出了成功运行以十进制。命令行版本返回正确的结果。 – luiscubal 2010-09-10 15:04:00