前天在生产环境中遇到一个问题:使用 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>

2 解决问题

只要调整 group_concat_max_len 到最大值就行了,官方在MySQL5.7的手册中给出了如下定义:

由于BZ的测试虚拟机MySQL5.7.19是64位的,所以可以通过下面这两种方法配置好 group_concat_max_len 为最大值``:

#### 方法一:修改MySQL配置文件my.cnf,在[mysqld]节点中添加group_concat_max_len = 18446744073709551615#### 方法二:直接控制台上设置立即生效-- 【必须操作】更改全局配置----SET GLOBAL group_concat_max_len=18446744073709551615;-- 【可选操作】使配置在当前会话中也立即生效,其它已经登录的会话终端需要重启生效----SET SESSION group_concat_max_len=18446744073709551615;

这里采用的是第二种方法,通过执行 SELECT LENGTH(GROUP_CONCAT(Fremark)) FROM account; 结果的对比,可以发现已经成功解决了MySQL5.7中使用GROUP_CONCAT数据被截断的问题。

总结

更多相关文章

  1. ES6 变量声明,箭头函数,数组方法,解构赋值,JSON,类与继承,模块化练习
  2. 箭头函数的基础使用
  3. Python技巧匿名函数、回调函数和高阶函数
  4. 浅析android通过jni控制service服务程序的简易流程
  5. Android(安卓)bluetooth介绍(四): a2dp connect流程分析
  6. Android架构分析之使用自定义硬件抽象层(HAL)模块
  7. Android中OpenMax的适配层
  8. android 包管理系统分析
  9. Android中获取屏幕相关信息(屏幕大小,状态栏、标题栏高度)

随机推荐

  1. php操作XML、读取数据和写入数据的实现代
  2. java使用xpath解析xml示例分享
  3. java对XML文件的解析、节点的增加、删除
  4. php操作xml入门之xml基本介绍及xml标签元
  5. java中使用sax解析xml的解决方法
  6. java生成XML的方法
  7. php操作xml入门之xml标签的属性分析
  8. Java生成和解析XML格式文件和字符串的实
  9. php 修改、增加xml结点属性的实现代码
  10. php操作xml