早两天,我们的运维找到我,说是客户那边的反馈说在迁移私有云时数据库里的有些表数据刷不到我们的共享缓存当中去,我对比了了一下数据发现表中有七千多条数据,而刷到缓存中的数据只有大概一千条不到的数据,而且最后一条数据是不全的。于是快速的将代码拉出来撸了一下从表里取数据的sql,发现如下:
片段.png我可以发现sql语句使用了group语句,那么group_concat的作用是什么呢?
group_concat(),手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果。
那么既然是一个结果集,我们想象会出现什么问题?聪明的同学可能已经猜到了,那就是结果太多导致结果集太长,从而会出现超长截断的问题,so,问题应该就好解决了,mysql中肯定有关于这个结果集的参数的设置,搜集资料可以发现使用这个语句我们可以看到当前的结果集的长度参数:
图片.png于是我们可以将这个参数设置大一点,可以使用SET@@global.GROUP_CONCAT_MAX_LEN=1024000(或者将值设置成-1,表示最大值)来解决这个问题。
但是仔细一想,如果我们数据很多很多,超过了我们的最大值怎么办?其实这个临时办法是个解决方案,但是后期我们想保证不再出问题的时候,我们应该找一个通用的办法来解决这个问题,比如分页查询.欢迎大家提出更好的意见!
网友评论