Создать случайную строку в хранимой функции MySql

Мне нужно сгенерировать случайную строку в хранимой функции 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] в шестнадцатеричную строку, а затем преобразует шестнадцатеричную строку в ascii-строку с помощью функции unhex().

Есть ли способ преобразовать цифру в символ ASCII (0x30 => '0', 0x31 => '1', 0x32 => '2' и т. д.) без двойного (байт => шестнадцатеричная 2-литеральная строка => char ) конверсия?


person Alexander Kiselev    schedule 27.11.2015    source источник


Ответы (2)


Почему бы просто не использовать:

return sha2(rand(), 256)

Если вы хотите больше случайности, просто объедините несколько вызовов rand().

person slaakso    schedule 27.11.2015

Для генерации случайной строки вы можете использовать функции CHAR() (для приведения целого числа к символу) и MOD():

CHAR(65+MOD(ROUND(RAND()*100),26))
person Vlad    schedule 27.11.2015