一、问题
使用mysql自带的函数方法:group_concat时,当数据量大时,数据会莫名其妙少了很多,出现这个问题的原因是什么呢?我们继续往下看
二、问题复现
1、创建一个表,名为test,自动填充若干数据,如图:
创建存储过程:
CREATE DEFINER=`root`@`localhost` PROCEDURE `add_test`(IN n int)
BEGIN
DECLARE i INT DEFAULT 1;
WHILE (i <= n) DO
INSERT INTO test values(i);
SET i = i + 1;
END WHILE;
END
调用存储过程添加若干数据:
call add_test(1000)
添加后的数据如下所示:
我们使用group_concat()函数去做时,并不能查出所有的数据,如图所示:
可以发现,到283就截断了,长度只有1024
三、问题解决
造成这个问题的原因是group_concat()函数有默认的大小(为1024),如果超过1024,系统会自动截取前面1024个的数据,如果不知道系统目前是多少的,可以使用语句查看
SHOW VARIABLES LIKE 'group_concat_max_len'
所以我们需要将默认大小增加,执行如下语句扩大长度:
SET GLOBAL group_concat_max_len = 102400;
SET SESSION group_concat_max_len = 102400;
执行后再次查询长度,如图:
再次调用group_concat()函数,就不会截断了,如图所示: