在MySql存储函数中生成随机字符串

时间:2015-11-27 10:52:48

标签: mysql stored-procedures data-conversion

我需要在MySql存储函数中生成一个随机字符串。 我解决了这个问题,但我的解决方案似乎太丑陋而且太慢了:

CREATE FUNCTION generate_salt() RETURNS varchar(11) CHARSET utf8
BEGIN
    DECLARE res varchar(11) DEFAULT '';
    DECLARE salt_sym varchar(2);
    DECLARE tmp_res varchar(20) DEFAULT'';
    DECLARE salt_len int DEFAULT 10;

    WHILE salt_len > 0 DO
      SET salt_sym = HEX(FLOOR(32 + RAND() * 96));
      SET tmp_res = CONCAT(tmp_res, salt_sym), salt_len = salt_len - 1;
    END WHILE;
    set res=UNHEX(tmp_res);
    RETURN res;
END

此代码将diapason [32,126]中的随机整数转换为十六进制字符串,然后使用unhex()函数将十六进制字符串转换为ascii-string。

有没有办法将数字转换为ASCII字符(0x30 =>'0',0x31 =>'1',0x32 =>'2'等),而无需双倍(byte => hex) 2-literal string => char)转换?

2 个答案:

答案 0 :(得分:1)

为什么不使用:

where (field1 like 'some_string' or (field1 is null and field2 like 'some_string'))

如果你想要更多随机性,只需连接多个rand()调用。

答案 1 :(得分:0)

为了生成随机字符串,您可以使用CHAR()(将整数转换为字符)和MOD()函数:

CHAR(65+MOD(ROUND(RAND()*100),26))