为什么可以';我是否在MySQL中向VARCHAR(str_len)传递一个变量?
在做了多年的MSSQL之后,我又回到了MySQL,这是一个相当具有挑战性的工作。我的noob问题是,为什么我不能将变量传递给为什么可以';我是否在MySQL中向VARCHAR(str_len)传递一个变量?,mysql,Mysql,在做了多年的MSSQL之后,我又回到了MySQL,这是一个相当具有挑战性的工作。我的noob问题是,为什么我不能将变量传递给VARCHAR(string\u length),如下所示: CREATE FUNCTION `get_random_strings` (string_length INT) RETURNS VARCHAR(string_length) BEGIN DECLARE return_string VARCHAR(string_length); SELECT c
VARCHAR(string\u 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
如何根据参数返回长度为的字符串?不需要。当
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)
);
感谢您的回答,我正在制作一个虚拟数据生成器,我就是这样做的:
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
CREATE DEFINER=`root`@`localhost`函数`get_varchar`(in_length varchar(2000))返回varchar(2000)字符集utf8mb4
确定性
返回子字符串(对于in_长度,从1返回MD5(RAND())
CREATE DEFINER=`root`@`localhost`过程`dummy\u insert`()
开始
声明计数器INT默认值为1;
声明默认值为100000的总行数;
而我将首先检查如何在MySQL中定义参数。我决定使用mysql中现有的get函数,这是一本手册。我刚看到他们。感谢@RiggsFollyth MySQL中的SQL语法分析器只支持VARCHAR长度的数值文本。您可以在SQL Server上执行此操作吗?非常确定,在本例中,您不能将其设为varchar(max)或确定最大长度,尝试动态指定varchar的长度没有任何好处,varchar会根据数据的大小自动调整其大小。您好@Jpsh,您是对的。在sql server中也不能执行此操作。谢谢你纠正我。谢谢@Schwern,我在做一个虚拟数据发生器。我想知道如何做一个函数,它接受一个可变长度的参数并返回一个具有该长度的字符串。但是我知道char和varchar的区别。我只想创建一个可以在insert语句中调用的函数,如下所示:insert INTOdb
table
(messageuid
,accountid
,jmessage
,已发送
,lmessage
)值(get_varchar(100),get_int(),get_varchar(500),get_varchar(50)、get_bit()、get_varchar(2000);@Sol我想可能就是这样。很高兴你把它解决了。一个调用rand
的函数不应该是确定性的。选中选择get_varchar(5),get_varchar(5)
。我想你会得到两次相同的字符串。