遇到问题:
项目中有个需求,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;
最后:
基础知识还是没有那么扎实,很多函数自己只是处于了解阶段。应该抓紧恶补基础知识。要不然碰到问题只能一次次的试错,或者请教他人。
猜你喜欢:暂无回复。