关于Mysql使用group_concat()函数的长度的坑

一、问题

使用mysql自带的函数方法:group_concat时,当数据量大时,数据会莫名其妙少了很多,出现这个问题的原因是什么呢?我们继续往下看

二、问题复现

1、创建一个表,名为test,自动填充若干数据,如图:

关于Mysql使用group_concat()函数的长度的坑_第1张图片

创建存储过程:

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)

添加后的数据如下所示:

关于Mysql使用group_concat()函数的长度的坑_第2张图片

 我们使用group_concat()函数去做时,并不能查出所有的数据,如图所示:

关于Mysql使用group_concat()函数的长度的坑_第3张图片

 可以发现,到283就截断了,长度只有1024

三、问题解决

造成这个问题的原因是group_concat()函数有默认的大小(为1024),如果超过1024,系统会自动截取前面1024个的数据,如果不知道系统目前是多少的,可以使用语句查看

SHOW VARIABLES LIKE 'group_concat_max_len'

关于Mysql使用group_concat()函数的长度的坑_第4张图片

所以我们需要将默认大小增加,执行如下语句扩大长度:

SET GLOBAL group_concat_max_len = 102400;
SET SESSION group_concat_max_len = 102400;

执行后再次查询长度,如图:

关于Mysql使用group_concat()函数的长度的坑_第5张图片

再次调用group_concat()函数,就不会截断了,如图所示:

关于Mysql使用group_concat()函数的长度的坑_第6张图片

 

你可能感兴趣的:(数据库,mysql,mysql,数据库)