MySQL中使用group_concat()函數數據被截取(有默認長度限制),謹慎!


最近在工作中遇到一個問題:

我們系統的一些邏輯處理是用存儲過程實現的,但是有一天客服反饋說訂單下單失敗,查了下單牽扯到的產品基礎資源,沒有問題。

下單的存儲過程中有這樣兩句代碼:

1   declare _err int default 0;
2   DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND set _err=1;
3   DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' set _err=2; 

執行存儲過程后 變量_err會返回1,只能調試存儲過程找問題了。調試到下面這段的時候,發現執行完這句sql,_err就變成1了

1 select group_concat(concat(@room_name,',',run_date,',',total_count) separator '|') into @order_desc from tmp_order_detail order by run_date;    

由於臨時表tmp_order_detail 中的數據比較多,所以猜測是不是group_concat的問題,所以我把臨時表中的數據減少了一半,發現成功了,所以猜測group_concat是不是有長度限制,google一下,果然。

關於group_concat函數:

group_concat數據量小的時候沒什么問題,但是數據量打的時候就有問題了

group_concat:默認可連接的長度是1024;如果已經設置了最大長度,超過這個長度就會被截取至這個長度;

在查詢(select)語句中,使用了group_concat之后,limit就會失效;

解決方法:

1修改MySQL的配置文件:

#需要設置的長度
group_concat_max_len = 5120

 

2、也可以使用sql語句設置:

SET GLOBAL group_concat_max_len=5120;
SET SESSION group_concat_max_len=5120;

我在存儲過程中采用了上面的第二種辦法,執行存儲過程,OK,成功!

 

下班(今天是周日)!!!

 


免責聲明!

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



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