首先项目里有一条类似这样的sql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
select
tr.xxx
tr.cm_ids,
group_concat(te.xxx) a,
group_concat(te.xxx) b,
group_concat(te.xxx) c,
group_concat(te.xxx) d,
from (select
tr.1,
tr.2,
tr.3,
group_concat(cm_id) cm_ids
from xxx tr
where tr.xxx = '123'
group by tr.1,tr.2,tr.3) tr
left join xxx tc on tr.xxx = tc.xxx
left join xxx te on tr.xxx = te.xxx
group by tr.1,tr.2,tr.3

只查询子查询tr的结果cm_ids大概是70多条,但作为整体查的时候发现只有一半不到,而且还被截断了, 查了下mysql的group_concat默认长度限制为1024,鉴于这里业务复杂、历史悠久,这个sql还远比这个长,无法从sql本身入手,只能将数据库的 group_concat_max_len调大,这里记录下过程

1
2
3
4
5
6
7
8
9
10
11
1、执行一下sql语句
SET GLOBAL group_concat_max_len = xxx; --重启服务后设置失效
SET SESSION group_concat_max_len = xxx; --只对当前当次查询有效

2、改配置文件(centos)-非容器
- which mysql
得到mysql的安装位置:/usr/local/mysql/bin/mysql
- /usr/local/mysql/bin/mysql --verbose --help|grep -A 1 'Default options'
得到配置文件的路径,服务器首先读取第一个文件,如果前一个文件不存在则继续读下一个,如果还不存在依次向后查找。
- group_concat_max_len=xxx
修改好后重启(说-1是最大值,但在测试后发现并不是,版本5.7.20