Mysql5.7中使用group concat函數(shù)數(shù)據(jù)被截?cái)嗟膯?wèn)題完美解決方法
前天在生產(chǎn)環(huán)境中遇到一個(gè)問(wèn)題:使用 GROUP_CONCAT
函數(shù)select出來(lái)的數(shù)據(jù)被截?cái)嗔耍铋L(zhǎng)長(zhǎng)度不超過(guò)1024字節(jié),開(kāi)始還以為是navicat客戶端自身對(duì)字段長(zhǎng)度做了限制的問(wèn)題。后面故意重新INSERT了一個(gè)字段長(zhǎng)度超1024字節(jié)的數(shù)據(jù),但是navicat能完整展示出來(lái),所以就排除了navicat的問(wèn)題。
然后想到1024這個(gè)熟悉的數(shù)字,會(huì)不會(huì)是C++框架在接收MySQL通過(guò)socket傳輸過(guò)來(lái)的數(shù)據(jù)時(shí)被處理了呢?于是手工在日志中打印這個(gè)字段,發(fā)現(xiàn)即使數(shù)據(jù)長(zhǎng)度超過(guò)1024字節(jié)仍然是可以完整顯示的。
1 查找原因
至此,只能從SQL語(yǔ)句出發(fā)了。網(wǎng)上搜了下 GROUP_CONCAT 數(shù)據(jù)截?cái)嗟膯?wèn)題,答案都指向了 group_concat_max_len 這個(gè)參數(shù),它的默認(rèn)值正好是1024??梢灾苯釉跀?shù)據(jù)庫(kù)中通過(guò)下面的命令查看這個(gè)默認(rèn)值:
mysql> show variables like 'group_concat_max_len'; +----------------------+-------+ | Variable_name | Value | +----------------------+-------+ | group_concat_max_len | 1024 | +----------------------+-------+ 1 row in set (0.00 sec) mysql>
MySQL官方手冊(cè) 對(duì)它的定義是 The maximum permitted result length in bytes for the GROUP_CONCAT() function
. ,也就是它限制了 GROUP_CONCAT
數(shù)據(jù)的長(zhǎng)度。
2 解決問(wèn)題
只要調(diào)整 group_concat_max_len
到最大值就行了,官方在MySQL5.7的手冊(cè)中給出了如下定義:
由于BZ的測(cè)試虛擬機(jī)MySQL5.7.19是64位的,所以可以通過(guò)下面這兩種方法配置好 group_concat_max_len 為最大值``:
#### 方法一:修改MySQL配置文件my.cnf,在[mysqld]節(jié)點(diǎn)中添加 group_concat_max_len = 18446744073709551615 #### 方法二:直接控制臺(tái)上設(shè)置立即生效 -- 【必須操作】更改全局配置---- SET GLOBAL group_concat_max_len=18446744073709551615; -- 【可選操作】使配置在當(dāng)前會(huì)話中也立即生效,其它已經(jīng)登錄的會(huì)話終端需要重啟生效---- SET SESSION group_concat_max_len=18446744073709551615;
3 測(cè)試效果
這里采用的是第二種方法,通過(guò)執(zhí)行 SELECT LENGTH(GROUP_CONCAT(Fremark)) FROM account;
結(jié)果的對(duì)比,可以發(fā)現(xiàn)已經(jīng)成功解決了MySQL5.7中使用GROUP_CONCAT
數(shù)據(jù)被截?cái)嗟膯?wèn)題。
總結(jié)
以上所述是小編給大家介紹的Mysql5.7中使用group concat函數(shù)數(shù)據(jù)被截?cái)嗟膯?wèn)題完美解決方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)本站網(wǎng)站的支持!
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。