2010-09-10 53 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