mysql 错误Row 349 was cut by GROUP_CONCAT()

本文介绍MySQL中GROUP_CONCAT函数的使用方法及其长度限制问题。当连接字符串超出默认长度1024时,结果会被截断。文章提供了解决方案,包括修改配置文件或直接设置全局变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本博客所有原创文章采用知识共享署名-非商业性使用-相同方式共享,转载请保留链接http://chaoqun.17348.com/2008/12/mysql-trap-of-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;

还可以排序和设置分隔符,功能强大。

"message": "\r\n### Error querying database. Cause: java.sql.SQLException: Row 304 was cut by GROUP_CONCAT()\r\n### The error may exist in io/dataease/ext/ExtVAuthModelMapper.xml\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: SELECT v_auth_model.id, v_auth_model.name, v_auth_model.label, v_auth_model.pid, v_auth_model.node_type, v_auth_model.model_type, v_auth_model.model_inner_type, v_auth_model.auth_type, v_auth_model.create_by, v_auth_model.level, v_auth_model.mode, v_auth_model.data_source_id, authInfo.PRIVILEGES AS `privileges` FROM ( SELECT GET_V_AUTH_MODEL_ID_P_USE ( ?, ? ) cids ) t, v_auth_model LEFT JOIN ( SELECT auth_source, group_concat( DISTINCT sys_auth_detail.privilege_extend ) AS `privileges` FROM ( `sys_auth` LEFT JOIN `sys_auth_detail` ON (( `sys_auth`.`id` = `sys_auth_detail`.`auth_id` ))) WHERE sys_auth_detail.privilege_value = 1 AND sys_auth.auth_source_type = ? AND ( ( sys_auth.auth_target_type = 'dept' AND sys_auth.auth_target IN ( SELECT dept_id FROM sys_user WHERE user_id = ? ) ) OR ( sys_auth.auth_target_type = 'user' AND sys_auth.auth_target = ? ) OR ( sys_auth.auth_target_type = 'role' AND sys_auth.auth_target IN ( SELECT role_id FROM sys_users_roles WHERE user_id = ? ) ) ) GROUP BY `sys_auth`.`auth_source` ) authInfo ON v_auth_model.id = authInfo.auth_source WHERE FIND_IN_SET( v_auth_model.id, cids ) and v_auth_model.model_type = ? ORDER BY v_auth_model.node_type desc, CONVERT(v_auth_model.label using gbk) asc\r\n### Cause: java.sql.SQLException: Row 304 was cut by GROUP_CONCAT()\n; uncategorized SQLException; SQL state [HY000]; error code [1260]; Row 304 was cut by GROUP_CONCAT(); nested exception is java.sql.SQLException: Row 304 was cut by GROUP_CONCAT()",
03-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值