关于MySQL递归查询GROUP_CONCAT返回值长度设置问题

本文分享了一次解决MySQL递归查询中统计数量与分页数量不匹配的问题经历。问题出现的原因在于未设置主键ID及GROUP_CONCAT函数的默认长度限制。文中详细介绍了如何通过调整GROUP_CONCAT_MAX_LEN参数来解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、描述

今天遇到一个mysql递归查询的问题,统计的数量和分页的数量对应不上,分页采用的是数据库递归查询的方法。问题思路:
1、统计sql问题或递归查询sql问题。
2、发现表没设置主键id(这脑子。。。),猜想是id重复问题。
经过多方验证是递归查询函数的问题,返回的字符串(逗号隔开的id)末尾总是少一半;猜想返回值大小太小,增加了返回值的大小后还是不对;继续查找原因,发现返回值有GROUP_CONCAT这个函数,猜想是不是这个函数的值太小了,导致返回的数据变少,百度了一下果然是的,坑爹啊。。。下面记录设置GROUP_CONCAT大小方法:

二、设置GROUP_CONCAT大小

第一种方法:
查看当前mysql group_concat_max_len的大小(不设置一般是1024);

SELECT @@global.group_concat_max_len;

在这里插入图片描述
我这个是修改过后的结果;1024这就是一般MySQL系统默认的最大长度,如果你的id串起来大于这个就会出问题,解决的办法:

1、直接sql执行设置语句

SET GLOBAL group_concat_max_len=102400;

这个sql我用navcat执行后结果是变了,但是执行递归返回的还是不对,一般来说sql设置是不用重启mysql服务的,我重启了一下发现结果又变回了1024,笑哭23333.。。。。

2、直接设置mysql配置文件my.ini

如果没有就新增配置:group_concat_max_len = 102400

然后重启mysql服务;在执行递归查询终于正常了。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值