mysql查询group_concat()数据不全导致数据被截断问题


查询语句如下: 

SELECT 发行人, GROUP_CONCAT( 股票代码, '##', 全称,'##', 简称) AS bond_info 
FROM 表名

查询该语句发现数据居然缺失如下:

140020##2014年记账式附息(二十期)国债##14附息国债20,G140020##2014年记账式附息(二十期)国债##14附息国债20,  省略部分数据...... ,101424##2014年记账式附息(二十四期)国债##国债1424,140024##

查来查去终于发现了一个巨坑,那就是group_concat()有长度限制102400, 可能数据太长导致被截断.

解决方法一:

windows下在my.ini加上group_concat_max_len = 102400 //自己设置的值

linux在mysql.cof中加上group_concat_max_len =102400 //自己设置的值

linux或者在my.cnf中加入如下
[mysqld]
group_concat_max_len = 4294967295(也可以为-1最大值)

重启mysql服务,完美解决,

注,mysql安装目录下没有my.ini,创建一个并加入:

group_concat_max_len = 4294967295

解决方法二:(不推荐,因为数据库重启后长度会重新变回1024)

//查看当前数据库的groupconcat长度
SHOW VARIABLES LIKE 'group_concat_max_len';

//执行以下语句修改成自己想要的长度
SET GLOBAL group_concat_max_len = 102400;  
SET SESSION group_concat_max_len = 102400;