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
3. Save the file and restart your MySQL server
4. Test your application again. You will now be able to store large files.
Enjoy 🙂