MySQL在使用group_concat()函数数据被截取
2024-09-01 15:13:29
遇到问题:
项目中有个需求,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。
最新文章
- 【Android】 修复ijkPlayer进行m3u8 hls流播放时seek进度条拖动不准确的问题
- JQuery 滚动轮播
- 关于学习javascript的一些建议
- struts2文件上传提示信息国际化
- POJ2686 Traveling by Stagecoach(状压DP+SPFA)
- Codeforces Round #242 (Div. 2) C. Magic Formulas (位异或性质 找规律)
- (转)asp.net 高质量缩略图
- Oracle字符函数(转换大小写,替换等)
- 虚拟化之KVM的安装续篇
- 1104--DNA排序
- Json安全
- VS2012 安装 NPOI (管理NuGet程序包)
- centos 终端界面代理设置
- 机器学习进阶-案例实战-图像全景拼接-图像全景拼接(RANSCA) 1.sift.detectAndComputer(获得sift图像关键点) 2.cv2.findHomography(计算单应性矩阵H) 3.cv2.warpPerspective(获得单应性变化后的图像) 4.cv2.line(对关键点位置进行连线画图)
- 关于Unity中表面着色器的使用
- 各大公司java后端开发面试题
- PGSql
- pc端样式初始化
- android四大组件(一)Activity
- ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)