受け入れられた答えは間違っています(または少なくともかなり意見が分かれています)-バックアップ手順とトランザクションクエリの点で複雑になるため、データベースの外部にデータを保存することは個人的には望んでいません。
他の人が指摘しているように、マニュアルには、BLOB列とTEXT列は合計行サイズにカウントされないと繰り返し記載されていますが、残念ながら、デフォルトの構成設定ではそうではなく、このエラーメッセージが表示されます。 (エラーメッセージは、問題に対処するためにVARCHARではなくTEXTを使用するように指示しているため、意味がありません。これはすでに発生しています。)
この制限の理由は、デフォルトのストレージメカニズムであるAntelope<です。 / a> 、行の可変長列の最初の768バイトを格納します。可能な解決策は、INNODBを使用して、ストレージメカニズムを代替のバラクーダ ストレージメカニズム:
SET GLOBAL innodb_file_format=Barracuda;
この設定は新しいデータベースファイルのデフォルトであるため、これはすぐには効果がありません。したがって、データベース全体を削除して再作成する必要があります。
または、(上記のように)Barracudaに切り替えてから、(さらに)テーブルごとのファイル戦略に切り替えます。
SET GLOBAL innodb_file_per_table=ON;
繰り返しになりますが、両方の設定が新しいテーブルのデフォルトであるため、これはすぐには効果がありません。そのため、テーブルを削除して再作成する必要があります。
これを行った後にMySQLデータフォルダを見ると、別々のファイルが作成されたことを確認できます。 「data」という名前のデータベースと「test」という名前のテーブルの場合、「data / test/bigtable.ibd」という名前のファイルが表示されます。
MySQLでグローバル設定を変更したくない場合は、SET SESSION
を試してください。 SET GLOBAL
の代わりに 、例: CREATE TABLE
を実行する直前 ステートメント。