Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

com.mysql.jdbc.PacketTooBigException

Tags:

mysql

blob

packet

I am storing images in MYSQL.

I have table as

CREATE TABLE myTable (id INT, myImage BLOB);

When I am trying to insert 4.7MB file, I am getting exception as

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

I believe this is related to image size only. Is there any other variable type that I can use?


Update 1

As per older SO question, I also tried with MEDIUMBLOB but still I am getting same error.

Adding Image to a database in Java


Update 2

At the start of the project, I execute below query and everything is working now

SET GLOBAL max_allowed_packet = 1024*1024*14;
like image 576
Fahim Parkar Avatar asked Jul 03 '12 22:07

Fahim Parkar


3 Answers

As the error says, it has nothing to do with variable type but rather the max_allowed_packet variable:

You must increase this value if you are using large BLOB columns or long strings. It should be as big as the largest BLOB you want to use. The protocol limit for max_allowed_packet is 1GB. The value should be a multiple of 1024; nonmultiples are rounded down to the nearest multiple.

But, generally speaking, don't store files in your database - store them in your filesystem and record the path to the file in the database.

like image 62
eggyal Avatar answered Nov 19 '22 14:11

eggyal


For Windows users:

mysql_home points to your mysql/mariadb installation folder.

open cmd, cd to %mysql_home%\bin and run mysqladmin > temp.txt This will spit out a lot of information about the usage of the tool. Somewhere among all that output you will find this information:

Default options are read from the following files in the given order: C:\windows\my.ini C:\windows\my.cnf C:\my.ini C:\my.cnf c:\mariadb-5.5.29-w inx64\my.ini c:\mariadb-5.5.29-winx64\my.cnf

This shows that you could have, if you don't have it already, a file called my.ini or my.conf in the %mysql_home% directory.

create my.ini and add the lines:

[mysqld]
#allow larger BLOBs to be stored
max_allowed_packet = 10M

make sure to include the settings group which is [mysqld] otherwise it will fail to start (and for me it ended up hanging in limbo).

You will now need to restart the MySQL daemon, this is done either by killing and starting the currently running mysqld process or by restarting the MySQL service (run services.msc, locate MySQL, press the restart button; or from cmd, net stop MySQL followed by net start MySQL).

like image 2
Peter Perháč Avatar answered Nov 19 '22 13:11

Peter Perháč


Following worked for me

edit my.cnf file ( mine was in /etc/mysql )

Then modify the max_allowed_packet value I set it to max_allowed_packet=200M

Make sure you restart MySQL for change to take effect

like image 1
Farm Avatar answered Nov 19 '22 13:11

Farm