说明:本文记录一个MySQL查询,返回数据被截断的问题;
场景
假设有个用户查询列表,查询条件中有个用户类型(普通用户、大会员、黄金大会员、铂金大会员、至尊大会员),是个下拉列表,可选择对应的用户类型来查询符合条件的用户。
一般来说,用户类型这个查询条件,会单独走一个接口,根据用户表中,所有用户的用户类型这个字段,去重后返回,表示当前拥有的所有用户类型种类。
对应的MySQL语句,如下:
select GROUP_CONCAT(distinct user_type) userType from i_users;
如下:
问题
如果种类很多的话,长度会很长,我把distinct
去掉,模拟下;
复制,展开,发现末尾有个类型被截断了,如下:
这是某次线上发现的问题,反馈有个类型条件没有,但有对应条件的记录,筛选不出来。
解决
排查下来,是函数GROUP_CONCAT
有长度限制,默认1024,超出部分被截断。这是MySQL的参数值,可通过下面两个SQL来设置;
# 查看配置项(默认为1024)
show variables like 'group_concat_max_len';# 设置配置值(设置为8192)
SET group_concat_max_len = 8192;
设置成8192
,就OK了,如果还有截断,就再设置大一点。