MySQL GROUP_CONCAT()查询结果截断解决方案

背景

项目部署后,出现已经配置了对应权限的角色在进行相应操作的时候,提示没有权限.从数据库中可以看到该角色的权限是有进行分配的,但是实际使用却出现了问题.

问题定位

show variables like "group_concat_max_len";

结果

如果此时返回结果中Value为1024那么基本就可以判断是这个变量引起的问题
项目中权限相关的信息是用group_concat()函数查询出来的,而mysql中对此函数查询出来的做了长度限制,即默认1024 此时如果group_concat()出来会对超过的结果进行截取.导致数据展示不全

解决方法

代码层次

这种就不细说了,写法换一个思路,不使用该 group_concat()函数

mysql临时方案

SET GLOBAL group_concat_max_len = 102400; #全局
SET SESSION group_concat_max_len = 102400;#局部
优点

不需要重新启动mysql服务,配置立马生效

缺点

只要服务挂掉,就要重新设置

根本方案

根据mysql服务器类型找到对应的配置文件进行修改,完成后需要重启

group_concat_max_len = 1024000 #参数值可以自己定义
windows环境

在mysql的配置中找到my.ini文件,默认是在C:/ProgramData/MYSQL下,需要开启显示隐藏文件夹进行编辑,注意新增的时候保存编码为ANSI 不能为UTF-8否则会启动mysql失败

linux环境
默认在/etc/my.cnf	 如果不在可以再往下进行搜索,输入 i 编辑添加后,:wq 进行保存
优点

配置永久生效

缺点

生产环境慎用,确定好是否能够重启,否则还是暂时使用临时方案

需要注意的点

  • 使用哪种方案务必考虑好后,以免产生不必要的影响.
  • 可以修改变量的值的地方有很多
    – 命令行
    – Navicat 命令行
    – Navicat服务器监控->变量
    – sql语句查询直接修改
  • 网上提出了一个方案
    – 是在你不确定大小的情况下group_concat_max_len = -1 即2的32次方-1
    – 这种我也尝试了下,但是结果查出来值为4 我的是mysql5.7版本
    – 为了准确还是推荐使用具体的值

存在疑问的点(后续解决问题)

  1. 数据库中为什么会设置这个大小限制
  2. group_concat_max_len = -1 是否有效
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值