背景
项目部署后,出现已经配置了对应权限的角色在进行相应操作的时候,提示没有权限.从数据库中可以看到该角色的权限是有进行分配的,但是实际使用却出现了问题.
问题定位
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版本
– 为了准确还是推荐使用具体的值
存在疑问的点(后续解决问题)
- 数据库中为什么会设置这个大小限制
group_concat_max_len = -1
是否有效