我需要在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)转换?
答案 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))