Com.mysql.jdbc.PacketTooBigException
Я храню изображения в MYSQL.
У меня есть таблица как
CREATE TABLE myTable (id INT, myImage BLOB);
Когда я пытаюсь вставить файл 4.7MB
, я получаю исключение как
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.
Я считаю, что это связано только с размером изображения. Есть ли другой тип переменной, который я могу использовать?
Обновление 1
Как и в предыдущем вопросе SO, я также пробовал с MEDIUMBLOB
, но все же я получаю такую же ошибку.
Добавление изображения в базу данных в Java
Обновление 2
В начале проекта я выполняю ниже запрос и все работает сейчас
SET GLOBAL max_allowed_packet = 1024*1024*14;
Ответы
Ответ 1
Как говорит ошибка, это не имеет никакого отношения к типу переменной, а скорее к переменной max_allowed_packet
:
Вы должны увеличить это значение, если используете большие столбцы BLOB
или длинные строки. Он должен быть таким большим, как самый большой BLOB
, который вы хотите использовать. Предел протокола для max_allowed_packet
составляет 1 ГБ. Значение должно быть кратно 1024; nonmultiples округляются до ближайшего кратного.
Но, вообще говоря, не храните файлы в своей базе данных - храните их в своей файловой системе и записывайте путь к файлу в базе данных.
Ответ 2
Для пользователей Windows:
mysql_home указывает на папку установки mysql/mariadb.
откройте cmd, cd в% mysql_home%\bin и запустите mysqladmin > temp.txt
. Это выплюнет много информации об использовании этого инструмента. Где-то среди всего этого выхода вы найдете эту информацию:
Параметры по умолчанию считываются из следующих файлов в указанном порядке:
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
Это показывает, что вы могли иметь, если у вас его еще нет, файл с именем my.ini
или my.conf в каталоге% mysql_home%.
создайте my.ini и добавьте строки:
[mysqld]
#allow larger BLOBs to be stored
max_allowed_packet = 10M
обязательно включите параметры группа, которая находится в [mysqld]
, иначе она не сработает (и для меня это оказалось висеть в неопределенности).
Теперь вам нужно перезапустить демон MySQL, это делается либо путем убийства и запуска текущего запущенного процесса mysqld, либо путем перезапуска службы MySQL (запустите services.msc, найдите MySQL, нажмите кнопку перезапуска или из cmd, net stop MySQL
, за которым следует net start MySQL
).
Ответ 3
После меня работали
отредактируйте файл my.cnf(мой был в /etc/mysql )
Затем измените значение max_allowed_packet
Я установил его
max_allowed_packet = 200M
Убедитесь, что вы перезапустили MySQL, чтобы изменения вступили в силу.