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,但受限於此參數。
在 [mysqld] 區段新增/修改:
[mysqld]
max_allowed_packet = 1024M -- 建議 256M~1G,視業務最大單筆大小而定
關鍵點: 必須放在 [mysqld] (Server 端),不要 放在 [client] 或 [mysql],那些是客戶端讀取的參數,不影響 Server 端限制。
# Linux
systemctl restart mysqld
# 或
service mysql restart
# Windows (管理員 CMD)
net stop mysql
net start mysql
SHOW VARIABLES LIKE 'max_allowed_packet';
輸出值應為設定的大小 (如 1073741824 代表 1GB)。
?maxAllowedPacket=1073741824 (部分驅動支援),但以 Server 端設定為準。LONGBLOB 建議分批、分流,避免單次超大封包導致 OOM 或超時。useCompression=true 減少網路封包體積。[client] 區段 → 無效。調大 max_allowed_packet 並重啟,即可徹底解決 LONGBLOB / LONGTEXT 大資料寫入失敗問題。