MySQLで大きなデータを登録しようとするとcom.mysql.jdbc.PacketTooBigException: 発生

MySQLで、3M程度のデータを登録しようとすると、以下のような例外が発生。


com.mysql.jdbc.PacketTooBigException: Packet for query is too large (3526504 > 1048576).
You can change this value on the server by setting the max_allowed_packet' variable.
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3068)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1834)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1976)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2503)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1737)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2022)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1940)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1925)

エラーメッセージが言っているように、「max_allowed_packet」を変更すれば直りました。すなわち、my.cnf(Windows の場合は my.ini)に、以下の記述を追加して完了。


[mysqld] ←←← [mysql]でないことに注意!
max_allowed_packet = 16M
MySQLのマニュアルページはこちら

それにしても親切なエラーメッセージです。僕も見習わなくては。