我正在尝试使用以下方法在 MySQL 中生成 36 个字符的随机字符串:
UPDATE my_table SET entity_uid = substring(MD5(RAND()) FROM 1 FOR 36);
但结果始终是 32 个字符的字符串。有没有办法获得更长的字符串?
我正在尝试使用以下方法在 MySQL 中生成 36 个字符的随机字符串:
UPDATE my_table SET entity_uid = substring(MD5(RAND()) FROM 1 FOR 36);
但结果始终是 32 个字符的字符串。有没有办法获得更长的字符串?
一种选择是生成两个 MD5 哈希,将它们连接在一起(总共 64 个十六进制字符),然后取其中的前 36 个字符:
SELECT SUBSTR(CONCAT(MD5(RAND()),MD5(RAND())),1,36)
(注意:MD5 哈希是 128 位;MySQL MD5() 函数返回 32 个十六进制字符。)
如果你使用 5.7.4 以上版本的 MySQL,你可以使用新添加的RANDOM_BYTES函数:
SELECT TO_BASE64(RANDOM_BYTES(40));
这将产生一个随机字符串,例如r633j3sfgE85f3Jz+3AEx6Xo6qPXPUZruNimhId18iy+J1qOgZyCgg==
.
UPDATE my_table SET entity_uid = UUID();
MD5 以 32 个字符的十六进制数字形式返回哈希值。
根据MySQL
计算字符串的 MD5 128 位校验和。该值作为 32 个十六进制数字的字符串返回,如果参数为 NULL,则返回 NULL。例如,返回值可以用作哈希键。请参阅本节开头有关有效存储哈希值的注释。