Hatena::ブログ(Diary)

on the center line.

2008-06-25

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

| 15:26

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のマニュアルページはこちら

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