2013-01-21 44 views
4

我試圖使用生成MySQL中的36字符的隨機字符串長:MySQL的隨機字符串超過32個字符

UPDATE my_table SET entity_uid = substring(MD5(RAND()) FROM 1 FOR 36); 

但結果始終是一個32字符的字符串。有沒有辦法獲得更長的字符串?

+0

concat幾個字符串? – Shomz

+2

你需要這個36個字符的隨機字符串* for *?值得注意的是,'MD5()'的範圍僅限於十六進制字符,而不是像它那樣「隨機」。 – eggyal

回答

0
UPDATE my_table SET entity_uid = UUID(); 
+0

**注意:** UUID函數設計爲返回一個通用唯一標識符。這不一定是「隨機」的。 MySQL在非Linux系統上使用隨機數生成UUID的一部分,並且在沒有網絡接口(MAC地址)的Linux系統上生成部分UUID。 – spencer7593

2

MD5將散列值作爲32個字符的十六進制數字返回。

根據MySQL

爲字符串算出一個MD5 128位校驗和。值爲 作爲32位十六進制數字的字符串返回,如果參數爲NULL,則返回NULL。例如,返回值可以用作散列鍵。請參閱本節開頭的註釋 ,以便高效地存儲散列值 。

+0

確實 - 但不是OP的問題的答案,是嗎? –

+0

對不起,我找到了答案: UPDATE my_table SET entity_uid = UUID(); \t 這是一個更簡單的方法來做到這一點。 – Doahh

+1

@Pekka웃我認爲這答案爲什麼他不能使用他提供的代碼獲取長度超過32位的字符串。但是,是的,你是對的,它不提供替代 –

5

一種選擇是產生兩個MD5散列,一起將它們連接起來(總共64個十六進制字符),然後取的第一36個字符:

SELECT SUBSTR(CONCAT(MD5(RAND()),MD5(RAND())),1,36) 

(注:一個MD5哈希是128位; MySQL的MD5()函數返回32個十六進制字符)

+0

我試圖做這樣的事情,但得到了錯誤的語法,所以感謝張貼該解決方案。 – Doahh

+0

太好了,我用這個命令生成了我的隨機字符串。 –

6

如果使用MySQL比5.7.4版本更高,則可以使用新添加的功能RANDOM_BYTES

SELECT TO_BASE64(RANDOM_BYTES(40)); 

這將產生一個隨機字符串,如r633j3sfgE85f3Jz+3AEx6Xo6qPXPUZruNimhId18iy+J1qOgZyCgg==