遇到问题:
项目中有个需求,MySQL中存储的是树状的数据。现在给出一个节点,需要从Mysql数据库中取出这个节点下所有的节点。采用MySQL的函数。
函数如下:
CREATE DEFINER=`root`@`%` FUNCTION `getMemberChildList`(rootId BIGINT) RETURNS mediumtext CHARSET utf8 BEGIN DECLARE str VARCHAR(60000) ; DECLARE cid VARCHAR(60000) ; SET GLOBAL group_concat_max_len=15120; SET SESSION group_concat_max_len=15120; SET str = ''; SET cid =cast(rootId as CHAR); WHILE cid is not null DO SET str= concat(str,',',cid); SELECT group_concat(member_id) INTO cid from mall.ums_member_grade where FIND_IN_SET(parent_id,cid) > 0; END WHILE; RETURN str; END
开始,数据量少的时候完全没有问题,随着数据量的增加,出现了查询结果被截断的情况,导致项目报错。
解决方案:
在排查之后,发现group_concat()函数有个默认值。
关于group_concat函数:
1,group_concat数据量小的时候没什么问题,但是数据量打的时候就有问题了
2,group_concat:默认可连接的长度是1024;如果已经设置了最大长度,超过这个长度就会被截取至这个长度;
3,在查询(select)语句中,使用了group_concat之后,limit就会失效;
group_concat_max_len = 5120
两种方式解决:
1、修改MySQL的配置文件:
#需要设置的长度 group_concat_max_len = 5120
2、也可以使用sql语句设置:
SET GLOBAL group_concat_max_len=5120; SET SESSION group_concat_max_len=5120;
最后:
基础知识还是没有那么扎实,很多函数自己只是处于了解阶段。应该抓紧恶补基础知识。要不然碰到问题只能一次次的试错,或者请教他人。
参考博客:
https://www.cnblogs.com/Steven-shi/p/7106495.html?utm_source=itdadao&utm_medium=referral。