项目场景:
前些天遇见一个BUG,关于MySql中GROUP_CONCAT函数。
例如:有些MySql查询场景需要GROUP_CONCAT函数,我在开发中为了取巧使用了GROUP_CONCAT函数,可谁相知在项目大到一定程度后,GROUP_CONCAT函数出现了瓶颈。
问题描述:
例如:数据传输过程中数据在GROUP_CONCAT函数瓶颈时出现丢失的情况。
SELECT role.description,role.id,role.`name`,GROUP_CONCAT(role_privilege.privilege_id SEPARATOR ',')as count FROM role LEFT JOIN role_privilege ON role.id = role_privilege.role_id
原因分析:
百度查询了下说是GROUP_CONCAT函数默认长度不超过1024,也就是说在超过1024之后,sql执行不会出错但是1024之后数据将被截取掉,只保留默认长度。
解决方案:
临时解决方案:
SET GLOBAL group_concat_max_len=102400;
SET SESSION group_concat_max_len=102400;
#该方法在mysql重启前一直有作用,但mysql一旦重启,则会恢复默认的设置值。
永久解决方案:
#在MySQL配置文件中my.conf或my.ini中添加:
#[mysqld]
group_concat_max_len=102400
#重启MySQL服务