zoukankan      html  css  js  c++  java
  • MySQL在使用group_concat()函数数据被截取

    遇到问题:

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

      

  • 相关阅读:
    Webpack打包原理
    Vue——VNode
    Vue——响应式原理
    HTTP2.0——头部压缩
    HTTP2.0
    浏览器打开2个页面会有几个进程?
    计算机网络——TCP如何保证可靠性
    操作系统——进程之间的通信
    前端路由hash与history下
    前端路由hash与history上
  • 原文地址:https://www.cnblogs.com/tujietg/p/11766397.html
Copyright © 2011-2022 走看看