码迷,mamicode.com
首页 > 数据库 > 详细

MySQL在使用group_concat()函数数据被截取

时间:2019-10-30 18:46:23      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:end   null   color   mys   dad   连接   数据库   efi   mem   

遇到问题:

  项目中有个需求,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

  

MySQL在使用group_concat()函数数据被截取

标签:end   null   color   mys   dad   连接   数据库   efi   mem   

原文地址:https://www.cnblogs.com/tujietg/p/11766397.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!