本文介绍 group_concat 函数报 4016 错误的原因以及解决方法。
问题现象
执行以下 SQL 语句将 id 列 与 id2 列合并为一个字符串提示错误,错误信息如下:
obclient> SELECT group_concat(concat('(',id,',',id2,')') SEPARATOR ',') AS ticket_id FROM (SELECT id,id2 FROM t LIMIT 10000) AS a;
ERROR 4016 (HY000): Ooooooooooooops
问题原因
该错误可能是由于系统变量 group_concat_max_len 设置超过了 1048574 。
group_concat_max_len 用于设置允许的 GROUP_CONCAT() 函数结果的最大长度,单位为字节,默认为 1024,取值范围为 4~18446744073709551615。有关该变量的信息,请参见《OceanBase 数据库 参考指南》的 系统变量 章节。
可以通过以下方式修改 group_concat_max_len 的值。
SET [SESSION | GLOBAL] group_concat_max_len=num;

解决方法
调整
group_concat_max_len系统变量的大小,该变量修改后直接生效。例如将该变量设置为使group_concat函数可用的最大值 1048753。obclient> SET group_concat_max_len = 1048573;重新执行 SQL 语句。
obclient> SELECT group_concat(concat('(',id,',',id2,')') SEPARATOR ',') AS ticket_id FROM (SELECT id,id2 FROM t LIMIT 10000) AS a;