20

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

5 に答える 5

25

エラーが示すように、それは変数の型とは関係がなく、むしろ変数と関係がありmax_allowed_packetます。

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

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

于 2012-07-03T22:44:08.133 に答える
2

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

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

my.iniを作成し、次の行を追加します。

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

設定グループを含めるように[mysqld]してください。そうしないと、起動に失敗します(そして、私にとっては、それは途方に暮れてしまいました)。

次に、MySQLデーモンを再起動する必要があります。これは、現在実行中のmysqldプロセスを強制終了して開始するか、MySQLサービスを再起動することによって行われます(services.mscを実行し、MySQLを見つけて、再起動ボタンを押します。またはcmdnet stop MySQLからnet start MySQL) 。

于 2016-04-12T08:57:48.153 に答える
1

以下は私のために働いた

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

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

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

于 2015-04-24T02:44:40.923 に答える
0

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

于 2018-07-31T07:45:20.527 に答える
0

max_allowed_pa​​cket変数には、構成ファイル(私の場合はmy.ini)にデフォルト値が設定されています。アプリケーションがパケットサイズがこの値を超えるクエリを実行しようとすると、この例外がスローされます。

私のセットアップは、MySQLServer8.0を搭載したWindows10マシン上にあります。

max_allowed_pa​​cketの目的の値(64M)を含むmy.iniファイルを、考えられるさまざまな場所(C:\ my.ini、C:\ Windows \ my.ini)にコピーしました。次に、mysqlサーバーを再起動しました。うまくいきませんでした。max_allowed_pa​​cket変数をデータベースに照会したところ、値は変更されていませんでした。

次の手順が機能しました。

  1. 別の場所にmy.iniファイルがあることを発見しました。

  2. 次の場所C:\ ProgramData \ MySQL \ MySQLServer8.0にあるmy.iniファイルを開きます。これには、max_allowed_pa​​cketの他に、多くのエントリがあります。

  3. max_allowed_pa​​cketのエントリを見つけて、目的の値(64Mなど)に設定します。

  4. my.iniファイルを保存して閉じます。

  5. MySQL80サービスを再起動します。

  6. mysqlサーバープロンプトにログインし、クエリを実行します

     show variables like 'max_allowed_packet';
    
  7. 希望の値に設定された値が表示されます。

于 2020-12-23T22:07:44.400 に答える