問題:mysql數據庫使用group_concat將多個圖片的地址連接,每個地址長度都標準是55,發現在超過18張后,第十九張圖片地址會被截斷;
原因:mysql的group_concat默認連接長度為1024字符,也就是說你需要連接后的連接超過1024字符,它只會顯示這么長,其余部分都會被截取丟掉。
解決辦法:
(1)使用sql語句(親測可用)
```
SET GLOBAL group_concat_max_len=102400;
SET SESSION group_concat_max_len=102400;
```
(2)修改配置文件
在mysql配置文件中添加如下這句,修改配置文件后記得需要重啟mysql服務
```
group_concat_max_len = 102400
```
解決過程:前兩天的項目中寫了一個獲取資源數據的接口,每條數據對應很多圖片,圖片在保存的的時候不是直接以逗號分隔而是單獨存表通過外鍵連接的。在查詢的時候就想到了使用group_concat將每一個資源數據對應的圖片地址查詢出然后以逗號連接成一條數據。今天下午同事突然告訴我,好像圖片一超過七張就顯示不出來了。查了一下后端返回數據,確實后面的地址不全導致加載不到。
通過debug打出執行sql,直接在navicat中運行發現結果一樣,sql語句如下
```
SELECT a.*,( SELECT GROUP_CONCAT( image ) FROM resource_image b WHERE b.resource_data_id = a.id ) AS images FROM resource_data a WHERE a.state <> 0
```
查了好久一無所獲,最后將整個項目數據庫導出到另一臺服務器上,運行同樣的sql居然沒有截斷。就斷定這絕壁是那個數據庫問題,然后又換了一臺服務器,七張圖片時沒有截斷正常。把整個項目部署了一套在自己覺得沒問題的服務器上,再查看數據,七張圖片沒問題,但好像超過十八張就又出問題了,這一次是所有服務器統一,當然第一臺服務器還是在七張的時候截。此時突然有個想法出現,是不是group_concat的問題,果斷百度了group_concat的長度,果真如此,原來mysql默認限制group_concat長度1024,也就是最后那幾臺服務器在第19張圖片地址的時候截取的長度,而第一臺明顯被人設置過。在使用兩條sql語句
```
SET GLOBAL group_concat_max_len=102400;
SET SESSION group_concat_max_len=102400;
```
之后問題果斷解決。
- 技能知識點
- 對死鎖問題的理解
- 文件系統原理:如何用1分鐘遍歷一個100TB的文件?
- 數據庫原理:為什么PrepareStatement性能更好更安全?
- Java Web程序的運行時環境到底是怎樣的?
- 你真的知道自己要解決的問題是什么嗎?
- 如何解決問題
- 經驗分享
- GIT的HTTP方式免密pull、push
- 使用xhprof對php7程序進行性能分析
- 微信掃碼登錄和使用公眾號方式進行掃碼登錄
- 關于curl跳轉抓取
- Linux 下配置 Git 操作免登錄 ssh 公鑰
- Linux Memcached 安裝
- php7安裝3.4版本的phalcon擴展
- centos7下php7.0.x安裝phalcon框架
- 將字符串按照指定長度分割
- 搜索html源碼中標簽包的純文本
- 更換composer鏡像源為阿里云
- mac 隱藏文件顯示/隱藏
- 谷歌(google)世界各國網址大全
- 實戰文檔
- PHP7安裝intl擴展和linux安裝icu
- linux編譯安裝時常見錯誤解決辦法
- linux刪除文件后不釋放磁盤空間解決方法
- PHP開啟異步多線程執行腳本
- file_exists(): open_basedir restriction in effect. File完美解決方案
- PHP 7.1 安裝 ssh2 擴展,用于PHP進行ssh連接
- php命令行加載的php.ini
- linux文件實時同步
- linux下php的psr.so擴展源碼安裝
- php將字符串中的\n變成真正的換行符?
- PHP7 下安裝 memcache 和 memcached 擴展
- PHP 高級面試題 - 如果沒有 mb 系列函數,如何切割多字節字符串
- PHP設置腳本最大執行時間的三種方法
- 升級Php 7.4帶來的兩個大坑
- 不同域名的iframe下,fckeditor在chrome下的SecurityError,解決辦法~~
- Linux find+rm -rf 執行組合刪除
- 從零搭建Prometheus監控報警系統
- Bug之group_concat默認長度限制
- PHP生成的XML顯示無效的Char值27消息(PHP generated XML shows invalid Char value 27 message)
- XML 解析中,如何排除控制字符
- PHP各種時間獲取
- nginx配置移動自適應跳轉
- 已安裝nginx動態添加模塊
- auto_prepend_file與auto_append_file使用方法
- 利用nginx實現web頁面插入統計代碼
- Nginx中的rewrite指令(break,last,redirect,permanent)
- nginx 中 index try_files location 這三個配置項的作用
- linux安裝git服務器
- PHP 中運用 elasticsearch
- PHP解析Mysql Binlog
- 好用的PHP學習網(持續更新中)
- 一篇寫給準備升級PHP7的小伙伴的文章
- linux 安裝php7 -系統centos7
- Linux 下多php 版本共存安裝
- PHP編譯安裝時常見錯誤解決辦法,php編譯常見錯誤
- nginx upstream模塊--負載均衡
- 如何解決Tomcat服務器打開不了HOST Manager的問題
- PHP的內存泄露問題與垃圾回收
- Redis數據結構 - string字符串
- PHP開發api接口安全驗證
- 服務接口API限流 Rate Limit
- php內核分析---內存管理(一)
- PHP內存泄漏問題解析
- 【代碼片-1】 MongoDB與PHP -- 高級查詢
- 【代碼片-1】 php7 mongoDB 簡單封裝
- php與mysql系統中出現大量數據庫sleep的空連接問題分析
- 解決crond引發大量sendmail、postdrop進程問題
- PHP操作MongoDB GridFS 存儲文件,如圖片文件
- 淺談php安全
- linux上keepalived+nginx實現高可用web負載均衡
- 整理php防注入和XSS攻擊通用過濾