经过多年的MSSQL处理,我又回到了MySQL,这非常具有挑战性。我的菜鸟问题是,为什么不能像下面这样传递变量到VARCHAR(string_length)
:
CREATE FUNCTION `get_random_strings` (string_length INT)
RETURNS VARCHAR(string_length)
BEGIN
DECLARE return_string VARCHAR(string_length);
SELECT concat(
char(round(rand()*25)+97),
char(round(rand()*25)+97),
char(round(rand()*25)+97),
char(round(rand()*25)+97),
char(round(rand()*25)+97),
char(round(rand()*25)+97),
char(round(rand()*25)+97),
char(round(rand()*25)+97),
char(round(rand()*25)+97),
char(round(rand()*25)+97)
)AS Random10CharacterString
RETURN 1;
END
如何根据参数返回具有长度的字符串?
答案 0 :(得分:0)
您不需要。 char
是固定长度,而varchar
是 var 有效长度。 varchar(255)
生成一个最大最多255个字符的字符串。
除非有特殊原因要限制返回字符串的长度,否则varchar(255)
很好。它只会使用所需的内存。
可以更简单地编写该函数,如下所示:
create function get_random_strings()
returns varchar(255)
no sql
return concat(
char(round(rand()*25)+97),
char(round(rand()*25)+97),
char(round(rand()*25)+97),
char(round(rand()*25)+97),
char(round(rand()*25)+97),
char(round(rand()*25)+97),
char(round(rand()*25)+97),
char(round(rand()*25)+97),
char(round(rand()*25)+97),
char(round(rand()*25)+97)
);
答案 1 :(得分:0)
感谢您的所有回答,我正在制作一个虚拟数据生成器,我就是这样做的:
CREATE DEFINER=`root`@`localhost` FUNCTION `get_varchar`(in_length varchar(2000)) RETURNS varchar(2000) CHARSET utf8mb4
DETERMINISTIC
RETURN SUBSTRING(MD5(RAND()) FROM 1 FOR in_length)
CREATE DEFINER=`root`@`localhost` PROCEDURE `dummy_insert`()
BEGIN
DECLARE counter INT DEFAULT 1;
DECLARE total_rows INT DEFAULT 100000;
WHILE counter <= total_rows DO
INSERT INTO `db`.`table`
(
`messageuid`,
`accountid`,
`jmessage`,
`kmessage`,
`is_sent`,
`lmessage`
)
VALUES
(
get_varchar(100),
get_int(),
get_varchar(500),
get_varchar(50),
get_bit(),
get_varchar(2000);
END WHILE;
END