我正在尝试在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);
一种选择是生成两个MD5哈希值,将它们连接在一起(总共64个十六进制字符),然后取其中的前36个字符:
SELECT SUBSTR(CONCAT(MD5(RAND()),MD5(RAND())),1,36)
(注意:MD5哈希值是128位;MySQL的MD5()函数返回32个十六进制字符。)
SELECT TO_BASE64(RANDOM_BYTES(40));
这将导致一个随机字符串,例如r633j3sfgE85f3Jz+3AEx6Xo6qPXPUZruNimhId18iy+J1qOgZyCgg==
。
SELECT LOWER(HEX(RANDOM_BYTES(20)))
应该保证40个字符。 - cawUPDATE my_table SET entity_uid = UUID();
UUID
函数旨在返回一个通用唯一标识符,这并不一定是“随机的”。在非 Linux 系统和没有网络接口(MAC 地址)的 Linux 系统上,MySQL 使用随机数来生成 UUID 的一部分。 - spencer7593MD5会将散列值作为32个十六进制数字返回。
根据MySQL的说明:
计算字符串的MD5 128位校验和。如果参数为NULL,则返回值为32个十六进制数字的字符串或NULL。例如,返回值可以用作哈希键。有关有效存储哈希值的说明,请参见本节开头的注释。
MD5()
函数的范围仅限于十六进制字符,这并不像它本应该的那样“随机”。 - eggyalSELECT LOWER(HEX(RANDOM_BYTES(18)))
可以获得具有最佳随机性质的 36 个字符的字符串。 - caw