MySQL生成N位数随机字符串的方式(真随机)

2022-03-09 362点热度 0人点赞 0条评论

需求,需要在MySQL的SQL语句中(录入插入一条新的记录,记录里面有个字段需要生成随机字符串)需要生成随机数。网上查了一番,MySQL好像还没有比较官方的现成的函数。

有一些是利用了rand(md5())这样的方法,不过觉得随机性不够,就不展开说了。

一下是另外发现的一些比较好的随机方法,整理下,供参考:

如果生成一位随机数

如下,是从[0-9A-Z]中随机生成一位,当然如果要换成小写,就只需要把大写的字母改成小写;如果要大小写都要,只要把小写的都加上,当然36(总的候选随机数的个数,要改成26+26+10=62)

SELECT elt(1 + floor(rand() * 36),
   0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 
   'A','B','C','D','E','F','G',
   'H','I','J','K','L','M','N',
   'O','P','Q','R','S','T',
   'U','V','W','X','Y','Z') as randomChar;

如果生成6位随机字符串

select concat(substring('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', rand()*62+1, 1),
              substring('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', rand()*62+1, 1),
              substring('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', rand()*62+1, 1),
              substring('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', rand()*62+1, 1),
              substring('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', rand()*62+1, 1),
              substring('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', rand()*62+1, 1)
             ) as randomString;

上面的例子是从[A-Za-z-09]62个字符中随机选出1个,然后拼接6次得到。

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论