问题描述:在mysql中编写存储过程时用到了GROUP_CONCAT函数,然后执行编写好的存储过程发现查询出来的数据不完整,
把存储过程里的sql拿出来单独执行,又没有一点问题,反复查询了好多博文,解释的好像是说GROUP_CONCAT函数拼接出来的文本有长度限制。但我觉得又很矛盾,为什么单独执行sql就可以查询出完整的数据,执行存储过程就查询出来数据不完整。
经过多次测试:GROUP_CONCAT函数在存储过程和函数中用于将多个字符串连接成一个字符串,在拼接成字符串时确实会存在拼接长度的问题,
mysql 默认的拼接最大长度为1024 个字节,由于1024个字节会出现不够用的情况。
查看当前mysql group_concat_max_len 的语法:SHOW VARIABLES LIKE 'group_concat_max_len';
可以看到当前的group_concat_max_len的大小,调整group_concat_max_len即可解决问题
解决方案:在数据库执行这两句配置语句,再执行存储过程,果然数据完整了,究其原因好像是因为GROUP_CONCAT函数在存储过程里面有长度限制
SET GLOBAL group_concat_max_len=102400;
SET SESSION group_concat_max_len=102400;