0

一括挿入ステートメントを使用する移行を作成しています。DBで特定の情報を検索し、特定のテーブルで使用されている形式にコンパイルして、以下のINSERTメソッドを使用して書き込みます。これを実行するMySQLマシンのmax_allowed_pa​​cketサイズはすべて16MBですが、これを変更することはできません。

私はこれでかなり新しいです。バッファに16MBを少し下回ったときに、バッファにあるものを挿入しようとしました。これは機能していません。max_allowed_pa​​cketのサイズが16MBを超え、問題が発生します。その理由は、彼らが何をしているのかを知っている人にはおそらく明らかです(しかし私にはわかりません)。

特定のmax_allowed_pa​​cketサイズで挿入できる文字数を計算する方法を知る必要があります。INNODBストレージエンジンを使用しています。

これは多かれ少なかれ私の挿入ステートメントがどのように見えるかです:

INSERT INTO _table_ (col_name1, col_name2, col_name3) 
      VALUES (val1, val2, val3), (val1, val2, val3), (val1, val2, val3)... etc.

さらに情報が必要な場合はお知らせください。この時点で、私は本当に何をすべきかわかりません。

質問を明確にするために編集されました。

4

2 に答える 2

1

私は同様の問題に遭遇し、試行錯誤して次のことを発見しました。

  1. max_allowed_pa​​cket-1 は、クエリで使用できる最大文字数です。
  2. クエリ内の空白は、クエリの長​​さに追加されます

例のために。

INSERT INTO _table_ (col_name1) Values('value1')    -- 1   

より短い

INSERT INTO _table_ (col_name1   ) Values('value1'    )    -- 2  

これは、文字列の長さに関して考えるとかなり明白に思えるかもしれませんが、この 2 つをクエリと考えれば、どちらもまったく同じように動作すると予想されます。
max_allowed_pa​​cket が上記の「1」の長さより大きく、「2」より小さい場合、1 は正しく実行されますが、2 は実行されません。

于 2013-07-08T20:08:57.270 に答える
0

私が提供したリンクとWebページのユーザーコメントを読むと、次のコマンドが生成されます。

show variables like 'max_allowed_packet';

これにより、クライアントはサーバーに構成設定を要求できます。

Variable_name       Value
max_allowed_packet, 1048576

もちろん、アプリケーションはクライアントSQLドライバーを制御して、一致するように(またはそれ以上に)セットアップします。

于 2012-09-19T06:42:21.153 に答える