Подтвердить что ты не робот

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;
4b9b3361

Ответ 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, чтобы изменения вступили в силу.