【问题标题】:Generate random string in MySql stored function在 MySql 存储函数中生成随机字符串
【发布时间】:2015-11-27 10:52:48
【问题描述】:

我需要在 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

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

有没有办法将数字转换为 ASCII 字符( 0x30 => '0'、0x31=>'1'、0x32=> '2' 等),无需双精度(字节 => 十六进制 2 字面字符串=> char) 转换?

【问题讨论】:

    标签: mysql stored-procedures data-conversion


    【解决方案1】:

    为什么不直接使用:

    return sha2(rand(), 256)
    

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2015-05-11
        • 1970-01-01
        • 2017-08-01
        • 2011-06-30
        • 1970-01-01
        • 2010-11-23
        • 2016-07-31
        相关资源
        最近更新 更多