一、描述
今天遇到一个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服务;在执行递归查询终于正常了。。。。