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

  

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

时间: 2024-11-11 06:54:26

MySQL在使用group_concat()函数数据被截取的相关文章

MySQL中使用group_concat()函数数据被截取(有默认长度限制),谨慎!

最近在工作中遇到一个问题: 我们系统的一些逻辑处理是用存储过程实现的,但是有一天客服反馈说订单下单失败,查了下单牵扯到的产品基础资源,没有问题. 下单的存储过程中有这样两句代码: 1 declare _err int default 0; 2 DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND set _err=1; 3 DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' set _

MySQL中使用group_concat()函数数据字符过长报错的问题解决方法

最近在办公软件项目,在开发权限指标遇到一个问题:我们系统的一些逻辑处理是用存储过程实现的,但是有一天客户反馈说权限指标分配报错,查了分配的权限数据牵扯到的数据权限基础资源,没有问题.权限指标分配的存储过程中有这样两句代码: SET @tests = '';SELECTGROUP_CONCAT( DISTINCT REPLACE ( concat( '''', ( indicator_content ), '''' ), ',', ''',''' ))AS Allnumber INTO @test

SQLServer 中实现类似MySQL中的group_concat函数的功能

SQLServer中没有MySQL中的group_concat函数,可以把分组的数据连接在一起. 后在网上查找,找到了可以实现此功能的方法,特此记录下. SELECT a, stuff((SELECT ',' + b FROM #tb WHERE a = t.a FOR xml path('')), 1, 1, '' )AS b from  # tb AS t GROUP BY a; 先对a列进行分组,对分组中的b以Xml形式输出,再使用stuff将开关多出的,删掉. 具体实现参考:http:/

Mysql中关于 group_concat函数详解

group_concat()主要功能:能将相同的行组合起来 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 基本查询 Sql代码   select * from aa; +------+------+| id| name |+------+------+|1 | 10||1 | 20||1 | 20||2 | 20||3 | 200 ||3 | 500 |+------+---

mysql中的group_concat函数的用法

1 本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . 2 MySQL中group_concat函数 3 完整的语法如下: 4 group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 5 基本查询 6 mysql> select * from aa; 7 +------+------+ 8 | id| name | 9 +-

mysql中的group_concat()函数的参数排序

1.用法:mysql group_concat()函数的参数是可以直接使用order by排序的. 2.例子表中数据如下: id  username  score 1    张三    90 2    李四    85 3    王五    80 4    张三    70 5    李四    80 6    张三    60   需求如下: 我们要查看每个人的片[多个]分数,将该人对应的[多个分数显示在一起],分数要[从高到底]排序 关键字分析可知: [多个分数显示在一起]: 必然用到组合[

MySQL concat concat_ws group_concat 函数(连接字符串)

CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. mysql> select concat('11','22','33'); +------------------------+ | concat('11','22','33') | +------------------------+ | 112233 | +------------------------+ mysql> select concat_ws(',','

Mysql 列转行group_concat函数,与行转列(原创)

1.正常情况. SELECT JoinEventIds from nt_mainnum 2.使用group_concat函数 select group_concat(JoinEventIds) from nt_mainnum 3.使用SUBSTRING_INDEX和CROSS JOIN将列里面的的数字都拆分出来. 方法一(网上查询的方法): 建配置表: CREATE TABLE digits (digit INT(1)); INSERT INTO digits VALUES (0), (1),

MySQL group by GROUP_CONCAT函数使用

今天看到案例是说 group by 的使用看到了,感觉还是比较不错的GROUP_CONCAT,把分组之后的字段会合并在一起. insert into table_name(code,name,age) value('10001','张三丰',12); insert into table_name(code,name,age) value('10002','张无忌',12); select count(*) as counts,age,GROUP_CONCAT(code) from table_n