香港云主机最佳企业级服务商!

ADSL拨号VPS包含了中国大陆(联通,移动,电信,)

中国香港,国外拨号VPS。

当前位置:云主机 > MYSQL >

电信ADSL拨号VPS
联通ADSL拨号VPS
移动ADSL拨号VPS

MySQL统计函数GROUP_CONCAT使用陷阱分析


时间:2020-11-02 13:45 作者:admin610456


本文实例分析了mysql/' target='_blank'>mysql统计函数GROUP_CONCAT使用中的陷阱。分享给大家供大家参考,具体如下:

最近在用MySQL做一些数据的预处理,经常会用到group_concat函数,比如类似下面一条语句
复制代码 代码如下:mysql>select aid,group_concat(bid) from tbl group by aid limit 1;

sql语句比较简单,按照aid分组,并且把相应的bid用逗号串起来。这样的句子大家可能都用过,也可能不会出问题,但是如果bid非常多的话,你就要小心了,比如下面的提示信息:

Query OK, XXX rows affected, 1 warning (3 min 45.12 sec)

怎么会有警告呢,打出来看看:

mysql> show warnings;+---------+------+-----------------------------------------+| Level  | Code | Message                 |+---------+------+-----------------------------------------+| Warning | 1260 | 1 line(s) were cut by GROUP_CONCAT()  |+---------+------+-----------------------------------------+

居然被GROUP_CONCAT截断了我的结果,查了一下手册,原来GROUP_CONCAT有个最大长度的限制,超过最大长度就会被截断掉,你可以通过下面的语句获得:

mysql> SELECT @@global.group_concat_max_len;+-------------------------------+| @@global.group_concat_max_len |+-------------------------------+|           1024   |+-------------------------------+

1024这就是一般MySQL系统默认的最大长度,如果你的bid串起来大于这个就会出问题,好在有解决的办法:

1.在MySQL配置文件中加上

group_concat_max_len = 102400 #你要的最大长度

2.可以简单一点,执行语句:

mysql> SET GLOBAL group_concat_max_len=102400;Query OK, 0 rows affected (0.01 sec)

再执行group_concat语句就不会出问题了,另外手册上还给出了group_concat的详细用法,给个示例你就明白了:
复制代码 代码如下:mysql>select aid,group_concat(bid order by bid separator ',') as bid_str from tbl group by aid;
还可以排序和设置分隔符,功能强大。

更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL日志操作技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》、《MySQL数据库锁相关技巧汇总》及《MySQL常用函数大汇总》

希望本文所述对大家MySQL数据库计有所帮助。

(责任编辑:admin)






帮助中心
会员注册
找回密码
新闻中心
快捷通道
域名登录面板
虚机登录面板
云主机登录面板
关于我们
关于我们
联系我们
联系方式

售前咨询:17830004266(重庆移动)

企业QQ:383546523

《中华人民共和国工业和信息化部》 编号:ICP备00012341号

Copyright © 2002 -2018 香港云主机 版权所有
声明:香港云主机品牌标志、品牌吉祥物均已注册商标,版权所有,窃用必究

云官方微信

在线客服

  • 企业QQ: 点击这里给我发消息
  • 技术支持:383546523

  • 公司总台电话:17830004266(重庆移动)
  • 售前咨询热线:17830004266(重庆移动)