欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

​MySql中group_concat字符长度限制 有大用 有大大用

正确答案

解决mysql函数group_concat长度限制


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qw222pzx/article/details/80867797


1. GROUP_CONCAT有个最大长度的限制,超过最大长度就会被截断掉,你可以通过下面的语句获得:

  SELECT @@global.group_concat_max_len;

   show variables like "group_concat_max_len";

2.在MySQL配置文件中my.cnfmy.ini中添加:

  #[mysqld]
  group_concat_max_len=102400

3.重启MySQL服务



来自 https://blog.csdn.net/qw222pzx/article/details/80867797




MySql中group_concat字符长度限制


 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuforeverlove/article/details/78813719

修改已经运行半年的项目,实时从第三方获取数据,最近出现一个问题,排查了好久,才发现是group_concat长度限制的问题,默认是1024

 

  1. (select GROUP_CONCAT(nd.record_date) from jk_data_day nd where nd.itemid = 10 and nd.devid = 1433628673 AND
  2. nd.record_date BETWEEN date_add('2017-12-15 15:13', interval -89 DAY) and date_add('2017-12-15 15:13', interval 59 SECOND)) as recordDates

在网上搜下解决的方法,主要是有两个方法:

 

  1.彻底修改,找到MYSQL的配置文件my.ini或者my.cnf,在里面添加以下信息

  group_concat_max_len = -1  # -1为最大值或填入你要的最大长度

  或者自己设置group_concat_max_len = 1024000。

        注意:需要重启MySQL才能生效。

 2.在客户端执行语句解决:

 

  1. SET GLOBAL group_concat_max_len=1024000;
  2. SET SESSION group_concat_max_len=1024000;

 

查询是否配置成功的命令:

      show variables like "group_concat_max_len";

 

-------------------------------------------------如何重启MySQL服务----------------------------------------------------

RedHat Linux (Fedora Core/Cent OS)
1.启动:/etc/init.d/mysqld start
2.停止:/etc/init.d/mysqld stop
3.重启:/etc/init.d/mysqld restart
 
Debian / Ubuntu Linux
1.启动:/etc/init.d/mysql start
2.停止:/etc/init.d/mysql stop
3.重启:/etc/init.d/mysql restart
 
Windows
1.点击“开始”->“运行”(快捷键Win+R)
2.启动:输入 net stop mysql
3.停止:输入 net start mysql


提示
Redhat Linux / Ubuntu也支持service command,
启动:# service mysqld start
停止:# service mysqld stop
重启:# service mysqld restart
Windows下不能直接重启(restart),只能先停止,再启动。

 

                           来自  https://blog.csdn.net/xuforeverlove/article/details/78813719


如何修改Mysql中group_concat的长度限制

 更新时间:2018年08月13日 16:33:16   作者:JouyPub    我要评论

在mysql中,有个函数叫“group_concat”,平常使用可能发现不了问题,在处理大数据的时候,会发现内容被截取了。怎么解决这一问题呢,下面脚本之家小编给大家带来了Mysql中group_concat的长度限制问题,感兴趣的朋友一起看看吧

在mysql中,有个函数叫“group_concat”,平常使用可能发现不了问题,在处理大数据的时候,会发现内容被截取了,其实MYSQL内部对这个是有设置的,默认不设置的长度是1024,如果我们需要更大,就需要手工去修改

详细说明如下:

  • 用了group_concat后,select里如果使用了limit是不起作用的.

  • 用group_concat连接字段的时候是有长度限制的,并不是有多少连多少。但你可以设置一下。

  • 使用group_concat_max_len系统变量,你可以设置允许的最大长度。

  • 系统默认的分隔符是逗号

修改方式:

1
SET [SESSION | GLOBAL] group_concat_max_len = 10240;

可修改的参数如下

GROUP_CONCAT将某一字段的值按指定的字符进行累加,系统默认的分隔符是逗号,可以累加的字符长度为1024字节。

1.先举一个简单的例子

1
select group_concat(f_a) from t_one group by f_b;

按f_b进行分组查询,将每组中的f_a进行累加。

2.修改默认的分隔符

1
select group_concat(f_a separator '_') from t_one group by f_b;

separator 是一个关键字,后面跟着要进行分隔的字符

3.排序

1
select group_concat(f_a order by f_a separator '_') from t_one group by f_b;

4.修改默认字符大小

1) 在MySQL配置文件中加上

1
group_concat_max_len = 102400 #你要的最大长度

2) 可以简单一点,执行语句,可以设置作用范围

1
2
SET GLOBAL group_concat_max_len=102400;
SET SESSION group_concat_max_len=102400;

5.和concat使用

group_concat默认返回的是BLOB大对象,可以使用concat,返回字符串,还可以在返回的内容,在加入其它的数据。

总结

以上所述是小编给大家介绍的如何修改Mysql中group_concat的长度限制,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

来自 https://www.jb51.net/article/145564.htm




MySQL GROUP_CONCAT长度限制引发的一场灾难

GROUP_CONCAT函数是对查处的分组数据对于分组列相同的数据合并成一列用逗号隔开的函数。

但是该函数的长度有个默认限制,默认是1024个字符,超过就会截断,从而导致用count统计GROUP_CONCAT的数量与实际打印GROUP_CONCAT具体值得数量不一致。

在代码排查的过程中Mybatis从数据库拿出来的值始终小于1024个字符,最终解决方法如下:

修改MySQL的一直参数GLOBAL group_concat_max_len;

set GLOBAL group_concat_max_len = 102400;   --默认是1024


来自 https://www.cnblogs.com/dbaxyx/p/7230618.html





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

最近在工作中遇到一个问题:

我们系统的一些逻辑处理是用存储过程实现的,但是有一天客服反馈说订单下单失败,查了下单牵扯到的产品基础资源,没有问题。

下单的存储过程中有这样两句代码:

1   declare _err int default 0;
2   DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND set _err=1;
3   DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' set _err=2; 

执行存储过程后 变量_err会返回1,只能调试存储过程找问题了。调试到下面这段的时候,发现执行完这句sql,_err就变成1了

1 select group_concat(concat(@room_name,',',run_date,',',total_count) separator '|') into @order_desc from tmp_order_detail order by run_date;    

由于临时表tmp_order_detail 中的数据比较多,所以猜测是不是group_concat的问题,所以我把临时表中的数据减少了一半,发现成功了,所以猜测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;

我在存储过程中采用了上面的第二种办法,执行存储过程,OK,成功!

 

 

来自 https://www.cnblogs.com/Steven-shi/p/7106495.html?utm_source=itdadao&utm_medium=referral


普通分类: