mysql中对于 GROUP_CONCAT 函数的长度限制处理

Posted 网事杂谈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql中对于 GROUP_CONCAT 函数的长度限制处理相关的知识,希望对你有一定的参考价值。

今天才知,原来 GROUP_CONCAT 函数返回的长度默认是有限制的:

mysql> SHOW VARIABLES LIKE "group_concat_max_len";

可见,默认是最长不超过 1024。

 

修改mysql的配置参数增加限制:

vi /etc/my.cnf
[mysqld]
group_concat_max_len = 1024000

 

注意,有些文章里说设置成 -1 也可以,意思是不限制长度,但经过实践,这样并不可以:

 

还是老老实实设置一个固定值比较妥当。

 

最后,重启mysql服务:

systemctl stop mysqld
systemctl start mysqld

 

MySQL GROUP_CONCAT长度限制引发的一场灾难

GROUP_CONCAT函数是对查处的分组数据对于分组列相同的数据合并成一列用逗号隔开的函数。

但是该函数的长度有个默认限制,默认是1024个字符,超过就会截断,从而导致用count统计GROUP_CONCAT的数量与实际打印GROUP_CONCAT具体值得数量不一致。

在代码排查的过程中Mybatis从数据库拿出来的值始终小于1024个字符,最终解决方法如下:

修改MySQL的一直参数GLOBAL group_concat_max_len;

set GLOBAL group_concat_max_len = 102400;   --默认是1024

以上是关于mysql中对于 GROUP_CONCAT 函数的长度限制处理的主要内容,如果未能解决你的问题,请参考以下文章

Spark SQL 替换 MySQL 的 GROUP_CONCAT 聚合函数

解决mysql中group_concat长度限制的方案

在带有函数的 MySQL GROUP_CONCAT 中排序

mysql中group_concat函数的作用

mysql—group_concat函数

MySQL中group_concat函数