「Mysql 行サイズが大きすぎます」の制限を変更する 質問する

「Mysql 行サイズが大きすぎます」の制限を変更する 質問する

制限を変更するにはどうすればいいですか

行サイズが大きすぎます (> 8126)。いくつかの列を TEXT または BLOB に変更するか、を使用するとROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED役立つ場合があります。現在の行形式では、BLOB768 バイトのプレフィックスがインラインで保存されます。

テーブル:

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 にとって有効だった方法は次のとおりです。

  1. my.cnfセクションの下のファイルに以下を追加します[mysqld]

    innodb_file_per_table=1
    innodb_file_format = Barracuda
    
  2. 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

おすすめ記事