Mysql GROUP_CONCAT函数数据超长导致截取问题记录
问题
今天在日常开发过程中,发现了一个查询问题。同样一个sql,查询id就能查到,但查询编码就查不到数据。后来发现某个编码的长度不对,才发现是被截取了。
原因
在 MySQL 中使用 GROUP_CONCAT 函数时,如果拼接的数据量过大,可能会导致结果被截断(部分丢失)。
这是因为 MySQL 有一个系统变量 group_concat_max_len 用于限制 GROUP_CONCAT 函数的最大返回长度,默认值通常是 1024 字节。当拼接结果超过这个限制时,超出部分会被自动截断,且不会报错。
解决方法
- 临时调整限制(当前会话有效)
SET SESSION group_concat_max_len = 102400; -- 设置为 100KB
- 全局调整限制(需要权限,重启后失效,除非修改配置文件)
SET GLOBAL group_concat_max_len = 1048576; -- 设置为 1MB
- 永久生效
在 MySQL 配置文件(如 my.cnf 或 my.ini)中添加:
[mysqld]
group_concat_max_len = 1048576