Je stocke des images dans MYSQL.
J'ai table comme
CREATE TABLE myTable (id INT, myImage BLOB);
Lorsque j'essaie d'insérer le fichier 4.7MB
, j'obtiens une exception en tant que
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.
Je crois que cela est lié à la taille de l'image uniquement. Existe-t-il un autre type de variable que je puisse utiliser?
Comme pour la question plus ancienne SO, j'ai également essayé avec MEDIUMBLOB
mais je reçois toujours la même erreur.
Ajout d'image à une base de données en Java
Au début du projet, j'exécute la requête ci-dessous et tout fonctionne maintenant
SET GLOBAL max_allowed_packet = 1024*1024*14;
Comme le dit l'erreur, cela n'a rien à voir avec le type de variable, mais plutôt avec la variable max_allowed_packet
:
Vous devez augmenter cette valeur si vous utilisez de grandes
BLOB
colonnes ou de longues chaînes. Il devrait être aussi grand que le plus grandBLOB
que vous voulez utiliser. La limite de protocole pourmax_allowed_packet
est de 1 Go. La valeur doit être un multiple de 1024; les non-multiples sont arrondis au multiple le plus proche.
Mais en règle générale, ne stockez pas de fichiers dans votre base de données, stockez-les dans votre système de fichiers et enregistrez le chemin d'accès au fichier dans la base de données.
Pour les utilisateurs de Windows:
mysql_home pointe vers votre dossier d'installation mysql/mariadb.
ouvrez cmd, cd à% mysql_home%\bin et exécutez mysqladmin > temp.txt
Ceci crachant beaucoup d’informations sur l’utilisation de l’outil. Quelque part parmi tous ces résultats, vous trouverez ces informations:
Les options par défaut sont lues dans les fichiers suivants, dans l'ordre donné: 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
Cela montre que vous pourriez avez, si vous ne l’avez pas déjà, un fichier appelé my.ini
ou my.conf dans le répertoire% mysql_home%.
créez my.ini et ajoutez les lignes:
[mysqld]
#allow larger BLOBs to be stored
max_allowed_packet = 10M
assurez-vous d'inclure les paramètres groupe qui est [mysqld]
sinon le démarrage échouera (et pour moi, il s'est retrouvé suspendu dans les limbes).
Vous devez maintenant redémarrer le démon MySQL. Pour ce faire, vous devez arrêter et lancer le processus mysqld en cours d’exécution ou redémarrer le service MySQL (exécutez services.msc, localisez MySQL, appuyez sur le bouton de redémarrage; ou à partir de cmd, net stop MySQL
suivi de net start MySQL
).
Suivre a travaillé pour moi
éditer le fichier my.cnf (le mien était dans/etc/mysql)
Puis modifiez la valeur max_allowed_packet Je la règle à Max_allowed_packet = 200M
Assurez-vous de redémarrer MySQL pour que les modifications prennent effet
Si vous utilisez AWS RDS, max_allowed_packet peut être modifié à l'aide de DB Parameter Groups