MySQL随机字符串长度超过32个字符

Doa*_*ahh 7 mysql

我试图在MySQL中生成一个36个字符的随机字符串:

UPDATE my_table SET entity_uid = substring(MD5(RAND()) FROM 1 FOR 36);
Run Code Online (Sandbox Code Playgroud)

但结果总是一个32个字符的字符串.有没有办法获得更长的字符串?

spe*_*593 10

一种选择是生成两个MD5哈希值,将它们连接在一起(总共64个十六进制字符),然后取出前36个字符:

SELECT SUBSTR(CONCAT(MD5(RAND()),MD5(RAND())),1,36)
Run Code Online (Sandbox Code Playgroud)

(注意:MD5哈希是128位; MySQL MD5()函数返回32个十六进制字符.)


zah*_*zah 8

如果使用版本高于5.7.4的MySQL,则可以使用新添加的RANDOM_BYTES函数:

 SELECT TO_BASE64(RANDOM_BYTES(40));
Run Code Online (Sandbox Code Playgroud)

这将导致一个随机字符串,如r633j3sfgE85f3Jz+3AEx6Xo6qPXPUZruNimhId18iy+J1qOgZyCgg==.

  • 但 SELECT LOWER(HEX(RANDOM_BYTES(20))) 应该保证 40 个字符。 (2认同)

Doa*_*ahh 3

UPDATE my_table SET entity_uid = UUID();
Run Code Online (Sandbox Code Playgroud)