这篇文章主要介绍了 MySQL 统计函数 GROUP_CONCAT 使用中的陷阱, 结合实例形式分析了 GROUP_CONCAT 用于统计时的长度限制问题与相关注意事项, 需要的朋友可以参考下
MySQL 是一个开放源码的小型关联式数据库管理系统,开发者为瑞典 MySQL AB 公司。MySQL 被广泛地应用在 Internet 上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了 MySQL 作为网站数据库。
本文实例分析了 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 数据库计有所帮助。
来源: http://www.phperz.com/article/17/0406/232621.html