时间:2018-07-13 22:34:35
前天在生产环境中遇到一个问题:使用GROUP_CONCAT函数select出来的数据被截断了,最长长度不超过1024字节,开始还以为是navicat客户端自身对字段长度做了限制的问题。后面故意重新INSERT了一个字段长度超1024字节的数据,但是navicat能完整展示出来,所以就排除了navicat的问题。
然后想到1024这个熟悉的数字,会不会是C++框架在接收MySQL通过socket传输过来的数据时被处理了呢?于是手工在日志中打印这个字段,发现即使数据长度超过1024字节仍然是可以完整显示的。
1 查找原因
至此,只能从SQL语句出发了。网上搜了下GROUP_CONCAT数据截断的问题,答案都指向了group_concat_max_len这个参数,它的默认值正好是1024。可以直接在数据库中通过下面的命令查看这个默认值:
mysql> show variables like 'group_concat_max_len'; +----------------------+-------+ | Variable_name | Value | +----------------------+-------+ | group_concat_max_len | 1024 | +----------------------+-------+ 1 row in set (0.00 sec) mysql>
MySQL官方手册对它的定义是The maximum permitted result length in bytes for the GROUP_CONCAT() function.,也就是它限制了GROUP_CONCAT数据的长度。
建议直接唯一滤下。
附上具体用法
group_concat函数:是将相同的行组合起来
完整的语法如下:group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
文章讲述了作者在生产环境中遇到GROUP_CONCAT函数返回数据被截断的问题,经过排查发现是由于MySQL的group_concat_max_len参数默认值为1024导致的。作者通过修改此参数解决了问题,并提供了group_concat函数的使用方法和相关变量的查询过程。
1852

被折叠的 条评论
为什么被折叠?



