Мне нужно сгенерировать случайную строку в хранимой функции 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 ) конверсия?