关于Mysql使用group_concat()函数的长度的坑 太过爱你忘了你带给我的痛 2024-03-31 12:52 14阅读 0赞 ### 一、问题 ### 使用mysql自带的函数方法:group\_concat时,当数据量大时,数据会莫名其妙少了很多,出现这个问题的原因是什么呢?我们继续往下看 ### 二、问题复现 ### 1、创建一个表,名为test,自动填充若干数据,如图: ![fe28538b75914ad88e09a76253ade188.jpeg][] 创建存储过程: 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) 添加后的数据如下所示: ![b73e7860ce664d62a38558dcc02e61ef.jpeg][] 我们使用group\_concat()函数去做时,并不能查出所有的数据,如图所示: ![b35c67f5b24d41adb01265ced6b2f5bd.jpeg][] 可以发现,到283就截断了,长度只有1024 ### 三、问题解决 ### 造成这个问题的原因是group\_concat()函数有默认的大小(为1024),如果超过1024,系统会自动截取前面1024个的数据,如果不知道系统目前是多少的,可以使用语句查看 SHOW VARIABLES LIKE 'group_concat_max_len' ![aea21f2509414bf4921d65563303ec05.jpeg][] 所以我们需要将默认大小增加,执行如下语句扩大长度: SET GLOBAL group_concat_max_len = 102400; SET SESSION group_concat_max_len = 102400; 执行后再次查询长度,如图: ![875706d0ab2445ff811555228cd21789.jpeg][] 再次调用group\_concat()函数,就不会截断了,如图所示: ![c0bf40d8fcda46b2be9eacd3b7492d96.jpeg][] [fe28538b75914ad88e09a76253ade188.jpeg]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/31/ffe7184d28f4447a982c5f93d4a67d7f.jpeg [b73e7860ce664d62a38558dcc02e61ef.jpeg]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/31/a7d2670d6dc445749036ce32110a89fb.jpeg [b35c67f5b24d41adb01265ced6b2f5bd.jpeg]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/31/82b3354f95d04348be37b16644b039f2.jpeg [aea21f2509414bf4921d65563303ec05.jpeg]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/31/44372e73970046ba863b9d12674d34f4.jpeg [875706d0ab2445ff811555228cd21789.jpeg]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/31/e27516f4da834f1caa2b3e6e1f4f1ef6.jpeg [c0bf40d8fcda46b2be9eacd3b7492d96.jpeg]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/31/793cbd5e305f4d218d46df2ae94eabac.jpeg
还没有评论,来说两句吧...