我正在尝试使用函数在 phpmyadmin 中获取一个随机字符串。我有以下代码:
CREATE FUNCTION randomPassword()
RETURNS varchar(128)
BEGIN
SET @chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
SET @charLen = length(@chars);
SET @randomPassword = '';
WHILE length(@randomPassword) < 12
SET @randomPassword = concat(@randomPassword, substring(@chars,CEILING(RAND() * @charLen),1));
END WHILE;
RETURN @randomPassword ;
END;
Run Code Online (Sandbox Code Playgroud)
现在我得到错误:
1064 - 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在第 5 行的 '' 附近使用的正确语法
有谁知道我该如何解决这个问题?
Kim*_*Kim 19
这比concat+substring例程要快。
select substring(MD5(RAND()),1,20);
Run Code Online (Sandbox Code Playgroud)
由于我已经测试插入 1M 随机数据,md5例程仅消耗+例程的1/4(甚至更少)时间;concatsubstring
问题是 md5 字符串仅包含 32 个字符,因此如果您需要更长的字符串,substring则必须自己手动生成更多的 md5 字符串。
试试这个更简单的解决方案:
SELECT CONV(FLOOR(RAND() * 99999999999999), 10, 36)
Run Code Online (Sandbox Code Playgroud)
这是通过使用分隔符解决的,我不确定如何解决,但它有效,谢谢
DELIMITER $$
CREATE FUNCTION randomPassword()
RETURNS varchar(128)
BEGIN
SET @chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
SET @charLen = length(@chars);
SET @randomPassword = '';
WHILE length(@randomPassword) < 12
DO
SET @randomPassword = concat(@randomPassword, substring(@chars,CEILING(RAND() * @charLen),1));
END WHILE;
RETURN @randomPassword ;
END$$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)