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.
これは画像サイズのみに関係していると思います。他に使用できる変数タイプはありますか?
古いSO質問に従って、私はMEDIUMBLOB
でも試しましたが、それでも同じエラーが発生します。
プロジェクトの開始時に、以下のクエリを実行し、すべてが現在動作しています
SET GLOBAL max_allowed_packet = 1024*1024*14;
エラーが言うように、それは変数の型とは何の関係もありません max_allowed_packet
変数:
大きな
BLOB
列または長い文字列を使用している場合は、この値を増やす必要があります。使用する最大のBLOB
と同じ大きさにする必要があります。max_allowed_packet
のプロトコル制限は1GBです。値は1024の倍数である必要があります。非倍数は最も近い倍数に切り捨てられます。
ただし、一般的に言えば、データベースにファイルを保存しないでください。ファイルシステムに保存し、ファイルへのパスをデータベースに記録します。
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
)が続きます。
フォローしてくれた
my.cnfファイルを編集します(私のファイルは/ etc/mysqlにありました)
次に、max_allowed_packetの値を変更して、max_allowed_packet = 200Mに設定します。
変更を有効にするには、必ずMySQLを再起動してください
AWS RDSを使用している場合、max-allowed_packetは DBパラメータグループ を使用して変更できます