MySQL之Row XXX was cut by GROUP_CONCAT()错误解决

MySQL数据库,一个更 UPDATE 更新用到了 group_concat 函数,报:Row XXX was cut by GROUP_CONCAT() 的错误,但单独的查询没有报错。

错误含义是:GROUP_CONCAT 有最大的长度限制,超过最大长度就会被截断掉。由 group_concat_max_len 系统变量限制最大长度,其默认值为 1024。

GROUP_CONCAT(expr)函数

此函数返回一个字符串结果,其中包含来自组的串联非 NULL 值。 如果没有非 NULL 值,则返回 NULL。 完整的语法如下:

1
2
3
4
5
6
7
8
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])
mysql> SELECT student_name,
GROUP_CONCAT(test_score)
FROM student
GROUP BY student_name;

Or:

1
2
3
4
5
mysql> SELECT student_name,
GROUP_CONCAT(DISTINCT test_score
ORDER BY test_score DESC SEPARATOR ' ')
FROM student
GROUP BY student_name;

group_concat_max_len函法

是 GROUP_CONCAT() 函数的最大允许结果长度(以字节为单位)。 默认值为 1024。

Command-Line Format --group-concat-max-len=#
System Variable group_concat_max_len
Scope Global, Session
Dynamic Yes
SET_VAR Hint Applies Yes
Type Integer
Default Value 1024
Minimum Value 4
Maximum Value (64-bit platforms) 18446744073709551615
Maximum Value (32-bit platforms) 4294967295

查看group_concat_max_len

MySQL 系统变量通常有 全局会话 两个级别的值。group_concat_max_len 默认都为 1024。

查看全局 group_concat_max_len

1
SELECT @@global.group_concat_max_len;

查看会话 group_concat_max_len

1
SHOW VARIABLES LIKE '%group_concat_max_len%';

修改group_concat_max_len

在运行时更改 group_concat_max_len 值的语法如下,其中 val 是无符号整数:

1
2
3
SET [GLOBAL | SESSION] group_concat_max_len = val;
-- 例如
SET SESSION group_concat_max_len = 102400;

或在 my.ini 配置文件中 [mysqld] 下面设置

1
2
3
[mysqld]

group_concat_max_len=102400

MySQL之Row XXX was cut by GROUP_CONCAT()错误解决

http://blog.gxitsky.com/2022/07/08/MySQL-Error-Row-cut-by-group-concat/

作者

光星

发布于

2022-07-08

更新于

2022-11-04

许可协议

评论