首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL longblob 欄位插入大數據報錯 PacketTooBigException 解決方案

     編輯:MySQL 綜合教學

錯誤現象

com.mysql.jdbc.PacketTooBigException: Packet for query is too large (2054817 > 1048576).
You can change this value on the server by setting the max_allowed_packet variable.

原因:MySQL 預設 max_allowed_packet = 1MB (1048576 bytes),單次 SQL 封包超過此限制即中斷連線。LONGBLOB 理論支援 4GB,但受限於此參數。

解決步驟

1. 修改伺服器端配置 (my.cnf / my.ini)

在 [mysqld] 區段新增/修改:

[mysqld]
max_allowed_packet = 1024M  -- 建議 256M~1G,視業務最大單筆大小而定

關鍵點: 必須放在 [mysqld] (Server 端),不要 放在 [client] 或 [mysql],那些是客戶端讀取的參數,不影響 Server 端限制。

2. 重啟 MySQL 服務生效

# Linux
systemctl restart mysqld
# 或
service mysql restart

# Windows (管理員 CMD)
net stop mysql
net start mysql

3. 驗證生效

SHOW VARIABLES LIKE 'max_allowed_packet';

輸出值應為設定的大小 (如 1073741824 代表 1GB)。

程式端補充建議

  • JDBC 連線字串:可加入 ?maxAllowedPacket=1073741824 (部分驅動支援),但以 Server 端設定為準。
  • 批次插入:大量 LONGBLOB 建議分批、分流,避免單次超大封包導致 OOM 或超時。
  • 壓縮傳輸:啟用 useCompression=true 減少網路封包體積。

常見誤區 ⚠️

  1. 只改 [client] 區段 → 無效。
  2. 設定過大 (如 2G) 導致記憶體壓力 → 按實際最大檔案上限 + 20% 設定。
  3. 未重啟服務 → 配置不生效。

調大 max_allowed_packet 並重啟,即可徹底解決 LONGBLOB / LONGTEXT 大資料寫入失敗問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved