在MySQL中生成随机字符串

时间:2015-03-10 11:18:19

标签: mysql random

我正在尝试使用函数在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行的''附近使用正确的语法

有谁知道如何解决这个问题?

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个符号)