最近在办公软件项目,在开发权限指标遇到一个问题:
我们系统的一些逻辑处理是用存储过程实现的,但是有一天客户反馈说权限指标分配报错,查了分配的权限数据牵扯到的数据权限基础资源,没有问题。
权限指标分配的存储过程中有这样两句代码:

SET @tests = '';
SELECT
GROUP_CONCAT( DISTINCT REPLACE ( concat( '''', ( indicator_content ), '''' ), ',', ''',''' ))
AS Allnumber INTO @tests

执行存储过程后 变量@tests会返回一段数据,只能调试存储过程找问题了。调试到下面这段的时候,发现执行完这句sql,@tests就变成不完整的一个语句
1 select GROUP_CONCAT( DISTINCT REPLACE ( concat( '''', ( indicator_content ), '''' ), ',', ''',''' )) into @tests from USEROFINDICATOR ;
由于USEROFINDICATOR表存储的权限指标都是按指标编号存储的数据比较多,所以猜测是不是group_concat的问题,所以我把USEROFINDICATOR表中的数据减少了一半,就是是按某一个用户查询,发现成功了,所以猜测group_concat是不是有长度限制,google一下,果然是这个函数长度不够造成。
关于group_concat函数:
group_concat数据量小的时候没什么问题,但是数据量大的时候就有问题了;
group_concat:默认可连接的长度是1024;如果已经设置了最大长度,超过这个长度就会被截取至这个长度;
在查询(select)语句中,使用了group_concat之后,limit就会失效;
解决方法:
1、修改MySQL的配置文件:
#需要设置的长度
group_concat_max_len = 5120

2、也可以使用sql语句设置:
SET GLOBAL group_concat_max_len=5120;
SET SESSION group_concat_max_len=5120;
但是以上两种方法貌似我都出现了问题,第二种方法开始生效,长度也查了都没问题,但是就是执行语句有问题;

最后我采用第三种方法如下:

3、修改mysql配置文件的方法,修改完后重启MySQL服务,则可以通过语句设置group_concat的作用范围,如:

SET GLOBAL group_concat_max_len=-1;

SET SESSION group_concat_max_len=-1;

以上设置Mysql最大长度设置,

mysql> show variables like "%concat%"; 命令查了一下,数据量挺长的。

注意LINUX 设置需要在/etc/my.cnf  且需要设置位置在 需要有管理员权限才可以操作GLOBAL;

我在存储过程中采用了上面的第三种办法,执行存储过程,OK,完美搞定!

但是有时候我们在生产环境中最好是使用前面两种,尽量避免线上重启数据库服务解决。

MySQL中使用group_concat()函数数据字符过长报错的问题解决方法的更多相关文章

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

    最近在工作中遇到一个问题: 我们系统的一些逻辑处理是用存储过程实现的,但是有一天客服反馈说订单下单失败,查了下单牵扯到的产品基础资源,没有问题. 下单的存储过程中有这样两句代码: ; ; ; 执行存储 ...

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

    SQLServer中没有MySQL中的group_concat函数,可以把分组的数据连接在一起. 后在网上查找,找到了可以实现此功能的方法,特此记录下. SELECT a, stuff((SELECT ...

  3. mysql中的group_concat函数的用法

    本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . MySQL中group_concat函数 完整的语法如下: grou ...

  4. MySQL中的group_concat函数的使用

    本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . MySQL中group_concat函数 完整的语法如下: grou ...

  5. MO拆分计划行程序中写入PRODUCTIONORDERS表数据出现重复导致报错(BUG)20180502

    错误提示:ORA-00001: 违反唯一约束条件 (ABPPMGR.C0248833319_6192)ORA-06512: 在 "STG.FP_MO_SPLIT", line 19 ...

  6. 修改了Mysql密码后连接不到服务且无报错信息解决方法以及修改密码方法

    安装MYSQL后更改了root的密码后用 net start mysql 启动时出现:无法启动,无报错信息 使用以下命令:1.管理员方式cmd进入mysql安装目录的bin目录下2.执行命令:mysq ...

  7. MySQL在使用group_concat()函数数据被截取

    遇到问题: 项目中有个需求,MySQL中存储的是树状的数据.现在给出一个节点,需要从Mysql数据库中取出这个节点下所有的节点.采用MySQL的函数. 函数如下: CREATE DEFINER=`ro ...

  8. Sql server的Merge语句,源表中如果有重复数据会导致执行报错

    用过sql server的Merge语句的开发人员都应该很清楚Merge用来做表数据的插入/更新是非常方便的,但是其中有一个问题值得关注,那就是Merge语句中的源表中不能出现重复的数据,我们举例来说 ...

  9. MySQL中的group_concat函数

    group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 以cat_id分组,把name字段的值打印在一行, ...

随机推荐

  1. scala的多种集合的使用(7)之集Set的操作方法

    1.给集添加元素 1)用+=.++=和add给可变集添加元素. scala> var set = scala.collection.mutable.Set[Int]() set: scala.c ...

  2. css文字与排版

    目录 文字与排版样式 `font文字样式 排版样式(text) 文字半透明 文字阴影 背景和颜色 基本 背景简写 背景透明 背景缩放 列表样式 表格样式 表格边框样式 折叠边框 设置宽度和高度 表格对 ...

  3. 我的工具:Ping工具

    C# Ping工具 通过该工具可以多个地点Ping服务器以检测服务器响应速度,同时也可以测试网站的响应速度,解析时间,服务器连接时间,下载速度 工具下载地址:https://download.csdn ...

  4. promise源码解析

    前言 大部分同学对promise,可能还停留在会使用es6的promise,还没有深入学习.我们都知道promise内部通过reslove.reject来判断执行哪个函数,原型上面的then同样的,也 ...

  5. 关于Eclipse使用Git基础篇

    一:Git的下载与安装与基本使用 1.打开eclipse->help->Eclipse Markplace->search->fiind输入Egit 你会看到如下截图(我的为已 ...

  6. AB PLC教程

      把文档贴到Blog.BBS或个人站等: 复制 预览 普通尺寸(450*500pix) 较大尺寸(630*500pix)

  7. C#语法相比其它语言比较独特的地方

    C#语法相比其它语言比较独特的地方(一) 本文讲解了switch语句可以用来测试string型的对象.多维数组.foreach语句.索引器和Property等内容 1,switch语句可以用来测试st ...

  8. 想玩 Android 开发板?这些常用命令你不知不行!

    2019-04-19 关键字:Android机顶盒常用命令.Linux命令 笔者早年间从事 Android 机顶盒开发工作,那会刚毕业,技术也比较菜,工作过程中遇到过不少困难,不过所幸当时就有做笔记的 ...

  9. [洛谷P1392] 取数

    无法用复杂状态进行转移时改变计算方式:巧妙的整体考虑:压缩空间优化时间 传送门:$>here<$ 题意 给出一个n*m矩阵,从每一行选一个数加起来,可以得到一个和.易知总共会有$n^n$个 ...

  10. 偏差-方差均衡(Bias-Variance Tradeoff)

    众所周知,对于线性回归,我们把目标方程式写成:. (其中,f(x)是自变量x和因变量y之间的关系方程式,表示由噪音造成的误差项,这个误差是无法消除的) 对y的估计写成:. 就是对自变量和因变量之间的关 ...