8

我正在运行以下查询:

变量

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 @sql = CONCAT( 'INSERT INTO `', @tgt, '` (SELECT ', @cols, ' FROM `', @src, '`);' );
PREPARE stm FROM @sql;
EXECUTE stm;

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

4

4 回答 4

3

限制是 的结果GROUP_CONCAT()。您可以使用以下方法进行更改:

SET group_concat_max_len = 10000
于 2013-05-23T21:11:14.460 回答
2

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

 [mysqld]

 max_allowed_packet = 50M
于 2013-05-23T20:07:06.447 回答
1
SET GLOBAL group_concat_max_len = (7*1024);
SET GLOBAL max_allowed_packet = (50*1024*1024);

问题的根源是函数 GROUP_CONCAT。文档说 GROUP_CONCAT 的限制: http : group_concat_max_len//dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concatmax_allowed_packet

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;
于 2013-05-23T22:37:09.903 回答
-1

只需使用上述解决方案:

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

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

于 2017-02-09T14:55:37.533 回答