webentwicklung-frage-antwort-db.com.de

com.mysql.jdbc.PacketTooBigException

Ich speichere Bilder in MySQL.

Ich habe einen Tisch als 

CREATE TABLE myTable (id INT, myImage BLOB);

Wenn ich versuche, eine 4.7MB-Datei einzufügen, erhalte ich eine Ausnahme als 

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.

Ich glaube, das bezieht sich nur auf die Bildgröße. Gibt es einen anderen Variablentyp, den ich verwenden kann?


Update 1

Wie in der älteren SO -Frage habe ich es auch mit MEDIUMBLOB versucht, aber ich bekomme immer noch den gleichen Fehler.

Hinzufügen eines Images zu einer Datenbank in Java


Update 2

Zu Beginn des Projekts führe ich die Abfrage aus und alles funktioniert jetzt

SET GLOBAL max_allowed_packet = 1024*1024*14;
15
Fahim Parkar

Wie der Fehler sagt, hat es nichts mit dem Variablentyp zu tun, sondern eher mit der max_allowed_packet Variable:

Sie müssen diesen Wert erhöhen, wenn Sie große BLOB Spalten oder lange Zeichenfolgen verwenden. Es sollte so groß sein wie das größte BLOB , das Sie verwenden möchten. Die Protokollgrenze für max_allowed_packet beträgt 1 GB. Der Wert sollte ein Vielfaches von 1024 sein. Nicht-Multiples werden auf das nächste Vielfache abgerundet.

Speichern Sie jedoch in der Regel keine Dateien in Ihrer Datenbank - speichern Sie sie in Ihrem Dateisystem und notieren Sie den Pfad zu der Datei in der Datenbank.

21
eggyal

Für Windows Benutzer:

mysql_home verweist auf Ihren Installationsordner mysql/mariadb.

Öffnen Sie cmd, cd unter% mysql_home%\bin und führen Sie mysqladmin > temp.txt aus. Dadurch werden viele Informationen über die Verwendung des Tools ausgegeben. Unter dieser Ausgabe finden Sie diese Informationen:

Standardoptionen werden aus den folgenden Dateien in der angegebenen Reihenfolge gelesen: 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

Dies zeigt, dass Sie könnten eine Datei namens my.ini oder my.conf im Verzeichnis% mysql_home% haben, wenn Sie sie noch nicht haben.

erstellen Sie my.ini und fügen Sie die Zeilen hinzu:

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

stellen Sie sicher, dass Sie die Einstellungen group angeben, die [mysqld] ist. Andernfalls wird es nicht gestartet (und für mich endete es in der Schwebe).

Sie müssen nun den MySQL-Daemon neu starten. Dies geschieht entweder durch Beenden und Starten des aktuell ausgeführten mysqld-Prozesses oder durch einen Neustart des MySQL-Dienstes (Ausführen von services.msc, Suchen nach MySQL, Drücken der Neustart-Schaltfläche oder über cmd, net stop MySQL, gefolgt von net start MySQL).

2
Peter Perháč

Folgendes arbeitete für mich

meine.cnf-Datei bearbeiten (meine war in/etc/mysql)

Dann ändern Sie den max_allowed_packet-Wert . Ich setze ihn auf Max_allowed_packet = 200M

Stellen Sie sicher, dass Sie MySQL neu starten, damit die Änderungen wirksam werden

1
Farm

Wenn Sie mit AWS RDS arbeiten, kann max_allowed_packet mit DB-Parametergruppen geändert werden.

0
Dinu Mathai