group_concat有长度限制

group_concat有长度限制     group_concat 详细用法请点此链接.

By jiefeiqi   at 2014-07-10   93 阅读   0 回复   0.0 希赛币

group_concat有长度限制!
长度陷阱
用了group_concat后,select里如果使用了limit是不起作用的.
用group_concat连接字段的时候是有长度限制的,并不是有多少连多少。但你可以设置一下。

使用group_concat_max_len系统变量,你可以设置允许的最大长度。
程序中进行这项操作的语法如下,其中 val 是一个无符号整数:
SET [SESSION | GLOBAL] group_concat_max_len = val;
若已经设置了最大长度,则结果被截至这个最大长度。

在SQLyog中执行 SET GLOBAL group_concat_max_len = 10 后,重新打开SQLyog,设置就会生效。

---------------------------
GROUP_CONCAT将某一字段的值按指定的字符进行累加,系统默认的分隔符是逗号,可以累加的字符长度为1024字节。可以对这些参数进行修改。

1.先举一个简单的例子

select group_concat(f_a) from t_one group by f_b;

按f_b进行分组查询,将每组中的f_a进行累加。

2.修改默认的分隔符

select group_concat(f_a  separator  ‘_‘) from t_one group by f_b;

separator  是一个关键字,后面跟着要进行分隔的字符

3.排序

select group_concat(f_a order by f_a  separator  ‘_‘) from t_one group by f_b;

4.修改默认字符大小

1).在MySQL配置文件中加上

group_concat_max_len = 102400 #你要的最大长度

2).可以简单一点,执行语句,可以设置作用范围

SET GLOBAL group_concat_max_len=102400;后直接跟包含group_concat 的sql语句即可。
           SET SESSION group_concat_max_len=102400;后直接跟包含group_concat 的sql语句即可。

5.和concat使用

group_concat默认返回的是BLOB大对象,可以使用concat,返回字符串,还可以在返回的内容,在加入其它的数 据。

另外一篇文章:

今天对一批数据要迁移转换,查了下,有group_concat这个函数简单实现字段的列转行设置,过程记录如下

一.测试数据准备

mysql> use test;
Database changed
mysql> select * from t_kenyon;
+------+
| id   |
+------+
|    1 |
|  123 |
|  789 |
|  345 |
|   78 |
+------+
5 rows in set (0.00 sec)

二.使用经过 
1.以默认的逗号作为分隔符

mysql> select group_concat(id) from t_kenyon;
+------------------+
| group_concat(id) |
+------------------+
| 1,123,789,345,78 |
+------------------+
1 row in set (0.00 sec)

2.对ID值进行排序后行转列

mysql> select group_concat(id order by id) from t_kenyon;
+------------------------------+
| group_concat(id order by id) |
+------------------------------+
| 1,78,123,345,789             |
+------------------------------+
1 row in set (0.00 sec)

3.使用其他分割符,如*和;等

mysql> select group_concat(id separator ‘*‘) from t_kenyon;
+--------------------------------+
| group_concat(id separator ‘*‘) |
+--------------------------------+
| 1*123*789*345*78               |
+--------------------------------+
1 row in set (0.00 sec)

4.分隔符与排序结合起来用

mysql> select group_concat(id order by id separator ‘_‘) from t_kenyon;
+--------------------------------------------+
| group_concat(id order by id separator ‘_‘) |
+--------------------------------------------+
| 1_78_123_345_789                           |
+--------------------------------------------+
1 row in set (0.00 sec)

5.对相同的值分组

mysql> insert into t_kenyon values (78);
Query OK, 1 row affected (0.00 sec)

mysql> select group_concat(id) from t_kenyon group by id;
+------------------+
| group_concat(id) |
+------------------+
| 1                |
| 78,78            |
| 123              |
| 345              |
| 789              |
+------------------+
5 rows in set (0.00 sec)

三.参数设置与限制说明 
1.查看服务器中设置

mysql> show variables like ‘%group_concat%‘;
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| group_concat_max_len | 1024  |
+----------------------+-------+
1 row in set (0.00 sec)

以上设置的值说明当前是默认长度1KB

2.改变参数值 
方法一:修改配置文件中参数,新增 group_concat_max_len = 10240 
方法二:在会话中实现,全局或当前session中 
SET GLOBAL group_concat_max_len=10240; 
SET SESSION group_concat_max_len=10240;

时间: 2024-11-10 20:22:37

group_concat有长度限制的相关文章

MYSQL中group_concat有长度限制!默认1024

在mysql中,有个函数叫"group_concat",平常使用可能发现不了问题,在处理大数据的时候,会发现内容被截取了,其实MYSQL内部对这个是有设置的,默认不设置的长度是1024,如果我们需要更大,就需要手工去修改配置文件. 详细说明如下: 用了group_concat后,select里如果使用了limit是不起作用的. 用group_concat连接字段的时候是有长度限制的,并不是有多少连多少.但你可以设置一下. 使用group_concat_max_len系统变量,你可以设置

MYSQL中group_concat有长度限制!默认1024(转载)

在mysql中,有个函数叫"group_concat",平常使用可能发现不了问题,在处理大数据的时候,会发现内容被截取了,其实MYSQL内部对这个是有设置的,默认不设置的长度是1024,如果我们需要更大,就需要手工去修改配置文件. 详细说明如下: 用了group_concat后,select里如果使用了limit是不起作用的. 用group_concat连接字段的时候是有长度限制的,并不是有多少连多少.但你可以设置一下. 使用group_concat_max_len系统变量,你可以设置

mysql group_concat的长度问题

show variables like 'group_concat_max_len'; +----------------------+-------+ | Variable_name        | Value | +----------------------+-------+ | group_concat_max_len | 1024  | +----------------------+-------+ 1 row in set (0.02 sec) 默认1024,超过就会截断,开始以

mysql group_concat函数是有长度限制的

在表关联查询中,特别是一对多关系的表查询中,group_concat函数是很有用的一个函数,帮助我们减少对数据库查询的次数,减少服务器的压力. 但是今天使用group_concat函数查询数据库时,发现查询出来的结果,居然少了很多.进过很多步的测试后,并上网百度后,验证了自己的结论,group_concat的长度是有限制的,默认为1024个字符.也就是说字符查询出来的字符串如果超过了1024个字节,将会自动截断. 在不考虑使用其它思路情况下的解决办法: 将将group_concat的长度设计加大

MySQL中group_concat函数 --- 很有用的一个用来查询出所有group by 分组后所有 同组内的 内容

本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 基本查询 mysql> select * from aa; +------+------+ | id| name | +------+------+ |1 |

mysql常用

MySQL添加字段的方法并不复杂,下面将为您详细介绍MySQL添加字段和修改字段等操作的实现方法,希望对您学习MySQL添加字段方面会有所帮助. 1.登录数据库>mysql -u root -p 数据库名称 2.查询所有数据表>show tables; 3.查询表的字段信息>desc 表名称; 4.1添加表字段 alter table table1 add transactor varchar(10) not Null; alter table table1 add id int uns

mysql   show global variables

以下变量全部来自mysql5.5.40-log 包括该版本的所有变量, 绝大部分变量都是解释的,那些没有解释的变量不是很重要, 不过后期还是会补充上去的.以下变量只有部分经过本人验证, ,没有验证均来自大师的博客. 仅供参考. 1.自增值相关 auto_increment_increment 1   #   增量 auto_increment_offset 1      #  起始值/偏移量 http://chengxuyuan.naxieshir.com/fenlei/2/p/151.html

查询Master下的系统表和系统视图获取数据库的信息和简单的渗透测试

在SQL中可以通过查询Master下的系统表(sys)和系统视图(information_schema)获取数据库的信息.SQL2000和SQL2005的结构略有不同. 系统表结构参考系统表详细说明. 系统信息结构图参考:http://dev.mysql.com/doc/refman/5.1/zh/information-schema.html 1.2000下操作: 系统表目录:大部分以dbo.sys为前缀. 系统视图目录:有20个常用的视图,以INFORMATION_SCHEMA为前缀. 在2

【记录】group_concat_max_len

这几天在帮别人定位一个问题,结果定位了半天都没有结果.redis中取出来的数据很奇怪,每次都不一样,而且总是取不完全. 我以为是redis的内存不够,导致数据丢失,但是不应该啊,这么点数据,也不至于内存不够. 实在不行了,我就让老大上,分分钟解决.原来,mysql 中拼接字符串是有长度限制的.我们拼接的字符串已经超过默认的长度 这篇文章对这个问题有说明.mysql中对group_concat 的长度默认是是1024字节.所以如果你需要更大长度的拼接数据,需要设置拼接长度. 我们项目的修改方案是