相关文章推荐
性感的鸵鸟  ·  Window: atob() method ...·  1 年前    · 
逆袭的板栗  ·  使用 Azure DevOps 在 ...·  1 年前    · 
爱跑步的电影票  ·  如何使用XPath3.0查找每个非唯一ID的 ...·  2 年前    · 
从容的沙滩裤  ·  windows下把mysql用gzip导出、 ...·  3 年前    · 
好帅的匕首  ·  深度 deepin 操作系统 20.9 ...·  3 年前    · 
Code  ›  mysql线上排错 group_concat_max_len group_concat函数 引起的查询数据丢失 实践笔记开发者社区
mysql mysql数据库 mysql函数
https://cloud.tencent.com/developer/article/1913662
深情的火龙果
3 年前
作者头像
cookily
0 篇文章

mysql线上排错 group_concat_max_len group_concat函数 引起的查询数据丢失 实践笔记

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > cookily > mysql线上排错 group_concat_max_len group_concat函数 引起的查询数据丢失 实践笔记

mysql线上排错 group_concat_max_len group_concat函数 引起的查询数据丢失 实践笔记

作者头像
cookily
发布 于 2021-12-07 15:22:20
1.3K 0
发布 于 2021-12-07 15:22:20
举报

mysql线上排错 group_concat_max_len group_concat函数 引起的查询数据丢失 实践笔记

  • 0.问题场景
  • 1.写几个sql来验证。
  • 2.这时就需要修改 group_concat_max_len 参数到需要的大小,比如102400,扩大一百倍。使得我们使用GROUP_CONCAT函数查询的时候可以正常返回。修改的方式有两种:
    • 2.1方法一:(永久生效需要重启)在MySQL的配置文件中加入如下配置:
    • 2.2.方法二:(临时使用,重启失效)更简单的操作方法,执行SQL语句:
  • 3.我们再次用第1步的sql来验证

0.问题场景

因为默认GROUP_CONCAT函数返回的结果大小被 MySQL 默认限制为1024(字节)的长度。

写这个是因为遇到接口返回数据跟 数据库 实际数据不符,相差较多,排查完发现的问题,这边记录下解决方案。

MySQL提供的group_concat函数可以拼接某个字段值成字符串,如 select group_concat(user_name) from sys_user,默认的分隔符是 逗号。

如:select group_concat(user_name SEPARATOR ‘_’) from sys_user; 但是如果 user_name 拼接的字符串的长度字节超过1024 则会被截断。

通过命令 “show variables like ‘group_concat_max_len’” 来查看group_concat 默认的长度:

show variables like 'group_concat_max_len';
在这里插入图片描述

1.写几个sql来验证。

我们可以先查出我们数据的最大长度,在用GROUP_CONCAT函数查询,对比数据长度差异,以及验证GROUP_CONCAT查出来的长度是不是1024

select user_name from sys_user;#查看user_name字段有多多少位,查看到的是6位,假设都是6位
select COUNT(user_name)*6 '个数*位数' from sys_user;#查看user_name字段有多少个乘以6位 会大于1024
select group_concat(user_name SEPARATOR '') from sys_user; #user_name字段拼接起来
select LENGTH(a.aa) as '字段拼接长度' from(select group_concat(user_name SEPARATOR '') as aa from sys_user ) a; #查看user_name字段拼接起来有总共有多长
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

可以看到只能查出1024位 远短于 6972

在这里插入图片描述

2.这时就需要修改 group_concat_max_len 参数到需要的大小,比如102400,扩大一百倍。使得我们使用GROUP_CONCAT函数查询的时候可以正常返回。修改的方式有两种:

2.1方法一:(永久生效需要重启)在MySQL的配置文件中加入如下配置:

#先查询group_concat_max_len的长度
show variables like "group_concat_max_len";
在这里插入图片描述
# 在mysqld下加入
group_concat_max_len = 102400
在这里插入图片描述

重启生效

#再次查询group_concat_max_len的长度
show variables like "group_concat_max_len";
在这里插入图片描述

2.2.方法二:(临时使用,重启失效)更简单的操作方法,执行SQL语句:

#先查询group_concat_max_len的长度
 
推荐文章
性感的鸵鸟  ·  Window: atob() method - Web APIs | MDN
1 年前
逆袭的板栗  ·  使用 Azure DevOps 在 Azure Databricks 上進行持續整合和傳遞 - Azure Databricks | Microsoft Learn
1 年前
爱跑步的电影票  ·  如何使用XPath3.0查找每个非唯一ID的最新日期?
2 年前
从容的沙滩裤  ·  windows下把mysql用gzip导出、导入_windows 下mysql 导出压缩_ohaozy的博客-CSDN博客
3 年前
好帅的匕首  ·  深度 deepin 操作系统 20.9 正式发布:Qt 版本升级至 5.15.8-51CTO.COM
3 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号