9

我正在尝试使用以下方法在 MySQL 中生成 36 个字符的随机字符串:

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

但结果始终是 32 个字符的字符串。有没有办法获得更长的字符串?

4

4 回答 4

12

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

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

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

于 2013-01-21T18:30:05.870 回答
10

如果你使用 5.7.4 以上版本的 MySQL,你可以使用新添加的RANDOM_BYTES函数:

 SELECT TO_BASE64(RANDOM_BYTES(40));

这将产生一个随机字符串,例如r633j3sfgE85f3Jz+3AEx6Xo6qPXPUZruNimhId18iy+J1qOgZyCgg==.

于 2016-04-18T08:45:24.813 回答
2
UPDATE my_table SET entity_uid = UUID();
于 2013-01-24T10:17:47.527 回答
2

MD5 以 32 个字符的十六进制数字形式返回哈希值。

根据MySQL

计算字符串的 MD5 128 位校验和。该值作为 32 个十六进制数字的字符串返回,如果参数为 NULL,则返回 NULL。例如,返回值可以用作哈希键。请参阅本节开头有关有效存储哈希值的注释。

于 2013-01-21T18:26:49.347 回答