JDBC has support for storing binary files in the database using the BLOB datatype. I covered this in a previous blog post: Reading and Writing BLOBs with MySQL.

However, you may run into errors if you need to store large files. In particular, you may encounter the following error messages:

Packets larger than max_allowed_packet are not allowed.
Data too long for column 'xxx' at row 1.

By default, the BLOB datatype can only handle files up to 64KB.

MySQL has multiple datatypes for handling binary data:

 TINYBLOB   :     maximum length of 255 bytes
 BLOB       :     maximum length of 65,535 bytes
 MEDIUMBLOB :     maximum length of 16,777,215 bytes
 LONGBLOB   :     maximum length of 4,294,967,295 bytes 

Storing Larger Files

If you need to store larger files, then follow these steps:

1. Change the databtype of your BLOB column to LONGBLOB

ALTER TABLE `demo`.`employees`
CHANGE COLUMN `resume` `resume` LONGBLOB NULL DEFAULT NULL ;

2. Edit the MySQL configuration file

On MS Windows: C:\Program Files\MySQL\MySQL Server x.x\my.ini
On Mac: /usr/local/mysql/my.cnf

In this file, add the line:

max_allowed_packet=256M

See the image below

MySQL Config file

MySQL Config file

 

3. Save the file and restart your MySQL server

4. Test your application again. You will now be able to store large files.

 

Enjoy 🙂