本文實(shí)例分析了MySQL統(tǒng)計(jì)函數(shù)GROUP_CONCAT使用中的陷阱。,具體如下:
最近在用MySQL做一些數(shù)據(jù)的預(yù)處理,經(jīng)常會(huì)用到group_concat函數(shù),比如類似下面一條語(yǔ)句
sql語(yǔ)句比較簡(jiǎn)單,按照aid分組,并且把相應(yīng)的bid用逗號(hào)串起來(lái)。這樣的句子大家可能都用過(guò),也可能不會(huì)出問(wèn)題,但是如果bid非常多的話,你就要小心了,比如下面的提示信息:
Query OK, XXX rows affected, 1 warning (3 min 45.12 sec)
怎么會(huì)有警告呢,打出來(lái)看看:
| mysql> show warnings;+---------+------+-----------------------------------------+| Level | Code | Message |+---------+------+-----------------------------------------+| Warning | 1260 | 1 line(s) were cut by GROUP_CONCAT() |+---------+------+-----------------------------------------+ | 
居然被GROUP_CONCAT截?cái)嗔宋业慕Y(jié)果,查了一下手冊(cè),原來(lái)GROUP_CONCAT有個(gè)最大長(zhǎng)度的限制,超過(guò)最大長(zhǎng)度就會(huì)被截?cái)嗟簦憧梢酝ㄟ^(guò)下面的語(yǔ)句獲得:
| mysql> SELECT @@global.group_concat_max_len;+-------------------------------+| @@global.group_concat_max_len |+-------------------------------+| 1024 |+-------------------------------+ | 
1024這就是一般MySQL系統(tǒng)默認(rèn)的最大長(zhǎng)度,如果你的bid串起來(lái)大于這個(gè)就會(huì)出問(wèn)題,好在有解決的辦法:
1.在MySQL配置文件中加上
| group_concat_max_len = 102400 #你要的最大長(zhǎng)度 | 
2.可以簡(jiǎn)單一點(diǎn),執(zhí)行語(yǔ)句:
| mysql> SET GLOBAL group_concat_max_len=102400;Query OK, 0 rows affected (0.01 sec) | 
再執(zhí)行g(shù)roup_concat語(yǔ)句就不會(huì)出問(wèn)題了,另外手冊(cè)上還給出了group_concat的詳細(xì)用法,給個(gè)示例你就明白了:
更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《MySQL日志操作技巧大全》、《MySQL事務(wù)操作技巧匯總》、《MySQL存儲(chǔ)過(guò)程技巧大全》、《MySQL數(shù)據(jù)庫(kù)鎖相關(guān)技巧匯總》及《MySQL常用函數(shù)大匯總》
希望本文所述對(duì)大家MySQL數(shù)據(jù)庫(kù)計(jì)有所幫助。
新聞熱點(diǎn)
疑難解答
圖片精選