制限を変更するにはどうすればいいですか
行サイズが大きすぎます (> 8126)。いくつかの列を TEXT または BLOB に変更するか、を使用するとROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED
役立つ場合があります。現在の行形式では、BLOB
768 バイトのプレフィックスがインラインで保存されます。
テーブル:
id int(11) No
name text No
date date No
time time No
schedule int(11) No
category int(11) No
top_a varchar(255) No
top_b varchar(255) No
top_c varchar(255) No
top_d varchar(255) No
top_e varchar(255) No
top_f varchar(255) No
top_g varchar(255) No
top_h varchar(255) No
top_i varchar(255) No
top_j varchar(255) No
top_title_a varchar(255) No
top_title_b varchar(255) No
top_title_c varchar(255) No
top_title_d varchar(255) No
top_title_e varchar(255) No
top_title_f varchar(255) No
top_title_g varchar(255) No
top_title_h varchar(255) No
top_title_i varchar(255) No
top_title_j varchar(255) No
top_desc_a text No
top_desc_b text No
top_desc_c text No
top_desc_d text No
top_desc_e text No
top_desc_f text No
top_desc_g text No
top_desc_h text No
top_desc_i text No
top_desc_j text No
status int(11) No
admin_id int(11) No
ベストアンサー1
この質問はサーバー障害あまりにも。
ぜひご覧になってみてくださいこの記事これは、MySQL の行サイズについて多くのことを説明しています。TEXT または BLOB フィールドを使用する場合でも、各フィールドの最初の 768 バイトがページにインラインで保存されるため、行サイズが 8K (InnoDB の制限) を超える可能性があることに注意することが重要です。
これを修正する最も簡単な方法は、バラクーダファイル形式InnoDB を使用します。これにより、最初の 768 バイトを保存する代わりに、テキスト データへの 20 バイトのポインターのみを保存することで、基本的に問題が完全に解消されます。
OP にとって有効だった方法は次のとおりです。
my.cnf
セクションの下のファイルに以下を追加します[mysqld]
。innodb_file_per_table=1 innodb_file_format = Barracuda
ALTER
使用するテーブルROW_FORMAT=COMPRESSED
。ALTER TABLE nombre_tabla ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
上記の方法でも問題が解決しない可能性があります。既知の(検証済みの)バグとともに翻訳エンジンが故障し、当面の一時的な解決策はマイISAMエンジンを一時ストレージとして使用します。my.cnf
ファイルでは次のようになります。
internal_tmp_disk_storage_engine=MyISAM