MySql GROUP_CONCAT踩坑记录

394 阅读1分钟

问题描述

今天遇到一个问题,在使用GROUP_CONCAT 拼接订单号时候,并且去重,出现下面这种情况,实际上是一个数据,但是后台返回给前台数据一会儿是2条重复数据,一会儿是1条不重复数据

敏感数据打码

在这里插入图片描述

搞得很郁闷,后来查来查去是GROUP_CONCAT本身拼接字段是没有顺序的,是无规则的,解决办法也很简单就是让排序呗

group_concat内部排序一下,就不会顺序错乱了

使用语法如下

group_concat(field order by field)

如下

GROUP_CONCAT(  oi.order_no ORDER BY oi.order_no asc ) AS order_nos,

需要注意的是 GROUP_CONCAT 函数默认有长度限制

如果拼接的字段比较大超过1024,超过会被截断,数据就会不准确

解决办法:

1 修改长度

可以查询
show variables like 'group_concat_max_len';

可以使用如下语句修改长度

SET GLOBAL group_concat_max_len = 4294967295;
SET SESSION group_concat_max_len = 4294967295;

2 业务代码中拼接

根据查询条件,在业务代码中手动拼接。