SQL查询时 group_concat 报错 was cut by GROUP_CONCAT()

MySql数据库查询时,使用group_concat报错“Row XXX was cut by GROUP_CONCAT()”,查了下是因为group_concat有个最大长度的限制,超过最大长度就会被截断掉,

我们检查一下mysql的全局环境变量:

mysql> SELECT @@global.group_concat_max_len;
+-------------------------------+
| @@global.group_concat_max_len |
+-------------------------------+
|                          1024 |
+-------------------------------+

检查一下是将生产环境的查询字段的的最大长度:

mysql> select max(length(extra)) from credit.apply;
+--------------------+
| max(length(extra)) |
+--------------------+
|               9599 |
+--------------------+

再检查一下最大聚合次数

mysql> select max(c1) from (select custid,count(1) as c1 from  credit.apply group by custid )t;
+---------+
| max(c1) |
+---------+
|      58 |
+---------+

所以估计最大可能出现的长度为

9599 *58+67=556809

可以改变group_concat_max_len变量解决该问题:

SET group_concat_max_len=556809;

 

MySQL 设置group_concat_max_len

GROUP_CONCAT函数用于将多个字符串连接成一个字符串,在拼接成字符串时就会存在拼接长度的问题,mysql 默认的拼接最大长度为1024 个字节,由于1024个字节会出现不够用的情况,所以有时需要去根据情况进行修改,方式如下。

1、查看当前mysql group_concat_max_len

进入mysql状态,输入:show variables like 'group_concat_max_len';

如果未曾修改会得到下面结果

2、修改mysql group_concat_max_len

a)、如果不方便重启mysql 可以在mysql状态通过命令设置,如:

 
  1. SET GLOBAL group_concat_max_len = 102400;

  2.  
  3. SET SESSION group_concat_max_len = 102400;

通过方式1查看即可。

注:此种方式在mysql重启后会读取配置文件重新设置,会导致设置失效,所以建议依旧要修改配置文件

b)、修改配置文件:my.ini

在[mysqld]下新增配置:group_concat_max_len = 102400


重启,通过方式1查看即可。

特别的,有时我们并不知需要多大的字节才能满足需求,此种情况可以考虑不设置最大字节(即采用最大字节数)即在配置文件设置group_concat_max_len=-1

此种情况可以通过方式1查看结果如下:

注: 4294967295 = 2^32  - 1

猜你喜欢

转载自blog.csdn.net/zzddada/article/details/115082236