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);