需求,需要在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次得到。
文章评论