web-dev-qa-db-ja.com

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;
17
Fahim Parkar

エラーが言うように、それは変数の型とは何の関係もありません max_allowed_packet 変数:

大きな BLOB 列または長い文字列を使用している場合は、この値を増やす必要があります。使用する最大の BLOB と同じ大きさにする必要があります。 max_allowed_packet のプロトコル制限は1GBです。値は1024の倍数である必要があります。非倍数は最も近い倍数に切り捨てられます。

ただし、一般的に言えば、データベースにファイルを保存しないでください。ファイルシステムに保存し、ファイルへのパスをデータベースに記録します。

22
eggyal

Windowsユーザーの場合:

mysql_homeは、mysql/mariadbインストールフォルダーを指します。

cmdを開き、%mysql_home%\ binにcdして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

これは、あなたがcouldを持っていて、まだ持っていない場合は、%mysql_home%ディレクトリにmy.iniまたはmy.confというファイルがあることを示しています。

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)が続きます。

2
Peter Perháč

フォローしてくれた

my.cnfファイルを編集します(私のファイルは/ etc/mysqlにありました)

次に、max_allowed_pa​​cketの値を変更して、max_allowed_pa​​cket = 200Mに設定します。

変更を有効にするには、必ずMySQLを再起動してください

1
Farm

AWS RDSを使用している場合、max-allowed_pa​​cketは DBパラメータグループ を使用して変更できます

0
Dinu Mathai