当遇到表关系是一对多的情况,例如一篇文章(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;

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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐