我正在尝试使用函数在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;
现在我收到了错误:
1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在第5行的''附近使用正确的语法
有谁知道如何解决这个问题?
答案 0 :(得分:2)
尝试这个更简单的解决方案:
SELECT CONV(FLOOR(RAND() * 99999999999999), 10, 36)
答案 1 :(得分:1)
它是通过使用Delimiter解决的,我不确定如何,但它的工作原理 谢谢
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 ;
答案 2 :(得分:0)
CREATE FUNCTION randomPassword()
RETURNS varchar(128)
AS
BEGIN
declare @chars nvarchar(25);
declare @charlen int;
declare @randomPassword nvarchar(128);
SET @chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
SET @charLen = len(@chars);
SET @randomPassword = '';
WHILE(LEN(@randomPassword) < 12)
BEGIN
SET @randomPassword = concat(@randomPassword, substring(@chars,CEILING(RAND() * @charLen),1));
END
RETURN @randomPassword
END
答案 3 :(得分:0)
这比concat
+ substring
例程要快。
select substring(MD5(RAND()),1,20);
我已经测试过插入1M随机数据,md5
例程仅消耗concat
+ substring
例程的 1/4 (甚至更少)时间;
问题是md5字符串仅包含32个字符,因此,如果您需要更长的字符,则必须手动生成更多md5字符串并自己substring
。
答案 4 :(得分:0)
SELECT SUBSTRING(REPLACE(REPLACE(REPLACE( TO_BASE64(MD5(RAND())), '=',''),'+',''),'/',''), 2, 40)
此解决方案生成固定长度的随机字符串,其中包含所有大小写的字符和数字。
SELECT SUBSTRING(REPLACE(REPLACE(REPLACE( TO_BASE64(MD5(RAND())), '=',''),'+',''),'/',''), 2, FLOOR(10+RAND()*31))
如果您需要一个随机长度的字符串(在此示例中为10到40个符号)