Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL:如何定义或获取长字符串变量_Mysql_Variables - Fatal编程技术网

MYSQL:如何定义或获取长字符串变量

MYSQL:如何定义或获取长字符串变量,mysql,variables,Mysql,Variables,我正在运行以下查询: 变量 样品 它适用于小桌子,我可以将@cols用于多种用途。但是,它停止处理大型表(大量字段)。我注意到它在1024个字符处中断。它忽略了限制。是否有办法获取长度超过1024个字符的变量或解决此问题的方法?简而言之,您需要找到mysqlmy.cnfconfig文件,并添加或更改允许的最大数据包: [mysqld] max_allowed_packet = 50M 该限制取决于GROUP\u CONCAT()的结果。您可以通过以下方式进行更改: SET group_c

我正在运行以下查询:

变量 样品
它适用于小桌子,我可以将@cols用于多种用途。但是,它停止处理大型表(大量字段)。我注意到它在1024个字符处中断。它忽略了限制。是否有办法获取长度超过1024个字符的变量或解决此问题的方法?

简而言之,您需要找到mysql
my.cnf
config文件,并添加或更改允许的最大数据包:

 [mysqld]

 max_allowed_packet = 50M

该限制取决于
GROUP\u CONCAT()
的结果。您可以通过以下方式进行更改:

SET group_concat_max_len = 10000
问题的根源是功能组\u CONCAT。文件中说,GROUP_CONCAT的
GROUP_CONCAT_max_len
受到
max_allowed_数据包的限制:

50%给@echo_me,50%给@barmar。这件事必须一起做,否则就行不通了

完整代码:

SET GLOBAL group_concat_max_len = (7*1024);
SET GLOBAL max_allowed_packet = (50*1024*1024);

SET @src = 'Test';
SET @tgt = 'Test2';
SET @db  = 'Test';
SET @pk  = 'ID, MyPk, etc';

SELECT CONCAT( @pk, GROUP_CONCAT(CONCAT( ", ", COLUMN_NAME) SEPARATOR "") )
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = @db
AND TABLE_NAME = @src
INTO @cols;

只需使用上述解决方案:

SET GLOBAL group_concat_max_len = (7*1024);
SET GLOBAL max_allowed_packet = (50*1024*1024);

然后,点击数据库;连接数据库;并创建另一个连接。在此新创建的连接中运行代码

请参阅MySQL用户定义变量的存储限制。答案是字符串可以容纳16MB,因此它无法解释为什么他在1K处被截断。如果您只执行
SELECT@sql
,会发生什么情况?也许限制在准备好的语句的大小上,而不是语句的大小string@Barmar是和否。限制取决于变量的大小。长度超过1024个字符的字符串(转换为@cols)将被修剪。@Barmar I错了。该限额是由CONCAT集团设定的。我没有使用php。我正在使用MySQL/Workbench/Etc,我试过了。我甚至发现你可以做
SET-GLOBAL-max\u-allowed\u-packet=52428800()。但它仍然不起作用。请注意(至少这是我的情况),您需要关闭当前的mysql连接/客户端,然后启动另一个连接/客户端才能起作用。欢迎使用Stack Overflow!虽然我们感谢您的回答,但如果它能在其他答案的基础上提供额外的价值,那就更好了。在这种情况下,您的答案不会提供额外的价值,因为另一个用户已经发布了该解决方案。如果先前的答案对你有帮助,你应该投票赞成,而不是重复同样的信息。
SET GLOBAL group_concat_max_len = (7*1024);
SET GLOBAL max_allowed_packet = (50*1024*1024);
SET GLOBAL group_concat_max_len = (7*1024);
SET GLOBAL max_allowed_packet = (50*1024*1024);

SET @src = 'Test';
SET @tgt = 'Test2';
SET @db  = 'Test';
SET @pk  = 'ID, MyPk, etc';

SELECT CONCAT( @pk, GROUP_CONCAT(CONCAT( ", ", COLUMN_NAME) SEPARATOR "") )
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = @db
AND TABLE_NAME = @src
INTO @cols;
SET GLOBAL group_concat_max_len = (7*1024);
SET GLOBAL max_allowed_packet = (50*1024*1024);