MYSQL--慎用group_concat()


背景

  因業務需要匯總數據,匯總條件較復雜,所以想匯總時獲取所有匯總數據的ID,以便后續使用。

 

功能

  將 group by 產生的同一個分組中的值連接起來,返回一個字符串結果。

語法

  group_concat( [distinct] 要連接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )

  說明:通過使用distinct可以排除重復值;如果希望對結果中的值進行排序,可以使用order by子句;separator是一個字符串值,缺省為一個逗號。

案例

select GROUP_CONCAT(registno order by registno desc separator ',') from icp_claim_info 

  

 

 

到生產才發現,group_concat默認是1024 字節,ID是27位,加上默認的分隔符“,” 一位,所以一條數據占28字節。換言之,group_concat 的默認配置只支持36條數據。

這個在官方文檔中也有說明,針對版本機器有最大的值。 

 

 

限制

  1.用了group_concat后,select 里如果使用了 limit 是不起作用的

  2.用group_concat連接字段的時候是有長度限制的,並不是有多少連多少。但你可以設置一下。

  3.使用group_concat_max_len系統變量,你可以設置允許的最大長度。

  4.系統默認的分隔符是逗號

  

修改方式

 

方式一:直接控制台上設置立即生效



【必須操作】更改全局配置

SET GLOBAL group_concat_max_len=102400;

【可選操作】使配置在當前會話中也立即生效,其它已經登錄的會話終端需要重啟生效

SET SESSION group_concat_max_len=102400;

 

方式二:修改MySQL配置文件my.cnf,在[mysqld]節點中添加

group_concat_max_len = 102400 #你要的最大長度

 

使用方式一進行修改

查詢修改結果

show variables like 'group_concat_max_len';

 

 

 

因為項目的匯總數據量不確定,所以最終棄用了 group_concat 。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM