按照时间分组统计查询的时候,返回的某个业务数据不全,业务数据是通过GROUP_CONCAT函数来统计的。

发布时间 2023-04-03 16:50:09作者: 勇敢-的心

【问题描述】

按照时间分组统计查询的时候,返回的某个业务数据不全,业务数据是通过GROUP_CONCAT函数来统计的。

 

 

【原因分析】

 查看页面调用的接口,并追踪到最终调用的方法和SQL语句;在Navicat中执行SQL语句也发现返回的数据不全,并发现返回的业务数据是使用GROUP_CONCAT函数来获取的;

把这个函数去掉后发现能够正常返回所有时间的数据;所以,问题一定出在这个函数上面。在网络一搜这个函数,发现该函数有一个坑:

在MySQL中有一个配置参数为:group_concat_max_len,它会限制使用group_concat返回的最大字符串长度,默认是1024。

果然,通过命令 show variables like  'group_concat_max_len'; 查询,长度为1024。

 

 

【解决方案】

  <临时方案>

通过下面的命令设置group_concat函数的最大长度为10240字节;

  SET GLOBAL group_concat_max_len = 1024 * 10;
  SET SESSION group_concat_max_len = 1024 * 10;

 该命令可以在不重启mysql服务的情况下立即生效,但是重启服务器后会还原配置。

 

<彻底方案>

  修改MySQL的配置文件(/etc/my.cnf),需要重启服务后才能生效。

  找到my.cnf配置文件,如果在/etc目录下面没有该文件,可以从服务器的其他地方拷贝一个*.cnf文件过来,并重命名为my.cnf文件,源文件内容删除掉;

  然后,在该文件中新增(如果存在就修改)该参数的配置:

  group_concat_max_len = 10240