当前位置: 代码迷 >> 综合 >> mysql下的“group_concat_max_len“参数设置
  详细解决方案

mysql下的“group_concat_max_len“参数设置

热度:44   发布时间:2023-10-25 06:14:31.0

文章目录

        • 如何查询group_concat的长度
        • 修改方法

当遇到表关系是一对多的情况,例如一篇文章(article)有多个标签(label)时,当列表查询文章时,并要展示文章对应的标签。对应sql如下:

select t1.id, t1.title, GROUP_CONCAT(t2.`name`) 
from article t1 LEFT JOIN label t2 on t1.id = t2.article_id 
GROUP BY t1.id 

当标签的数量不多时,没有什么问题,当文章的标签没有限制,出现很多时,会莫名其妙被截掉后面的标签。
因为mysql下的GROUP_CONCAT函数默认的长度为1024/1KB,当拼接的长度超过1024时,会自动截取掉后面的数据。

如何查询group_concat的长度

mysql> show variables like "group_concat%";+--------------------------+------------+
| Variable_name            | Value      |
+--------------------------+------------+
| group_concat_max_len     | 1024       |
+--------------------------+------------+

修改方法

  1. 修改配置文件

    可以编辑my.cnf来修改(windows下my.ini),在[mysqld]段或者mysql的server配置段进行修改。可以编辑my.cnf来修改(windows下my.ini),在[mysqld]段或者mysql的server配置段进行修改。

代码如下:

group_concat_max_len = 102400

如果找不到my.cnf可以通过
代码如下:

mysql --help | grep my.cnf

linux下该文件在/etc/下。

  1. 直接通过sql语句修改
SET GLOBAL group_concat_max_len = 102400;
SET SESSION group_concat_max_len = 102400;

注意:该方法缺点是重启服务后设置失效

  相关解决方案