做项目的时候,需要做一个报表的功能,框架是springboot,所以用到是的MySQL的group by,分组统计的,然后在group_conct(),来合并某个字段。应为数据量大的问题,功能是实现的,但是数据对不上。一开始认为自己写的有问题,但是反复的查看逻辑代码,发现是数据出现问题,这是为什么呢?
因为我要用到的是group_concat,完后再拼接成为json数据,在逻辑代码中需要解析json数据,但是总是报错,com.alibaba.fastjson.JSONException: unclosed.str.lit,这个意思就是字符串的格式错误,数据多也没有细看,有的正常,有的不正常,所以来看数据,发现还真有的数据格式拼接错误,仔细查找原因发现是的group_concat出现问题。
当时的数据表不是有自己创建的,查看之后比mysql中许多的sql都是默认设置,现在就说这个group_concat,他在数据中默认是1024字节的,超过这字节的字符串是会截取前面的1024字节,后面的是不输出的,所以才报上面的unclosed.str错误。
现在来设置group_concat的最大长度:
1.在客户端设置,需要的是admin的权限
SHOW VARIABLES LIKE "group_concat_max_len"; #查询最大值
SET GLOBAL group_concat_max_len=1024000;
SET SESSION group_concat_max_len=1024000;
2.找到MYSQL的配置文件my.ini或者my.cnf,添加如下信息:
group_concat_max_len = -1 # -1为最大值或填入你要的最大长度
或者自己设置group_concat_max_len = 1024000。
完后再重启,就解决了。