DBAtlas · データベース運用アトラス

1118: ER_TOO_BIG_ROWSIZE: Row size too large(行サイズが大きすぎる)

MySQL

意味

定義しようとしているテーブルの行サイズが、ストレージエンジンが許容する最大行サイズを超えている。BLOB/TEXT 以外の列の最大行サイズは 65535 バイトで、InnoDB にはページサイズに依存する追加の制限がある。

原因

多数の幅の広い列 (特に長い VARCHAR/CHAR) の定義、utf8mb4 などのマルチバイト文字セットで 1 文字が最大 4 バイトを占めること、または InnoDB の COMPACT/REDUNDANT 行フォーマットで大きな列がインラインに格納されること。

対処方法

一部の大きな列を TEXT/BLOB に変換する (これらはページ外に格納できる)。不要な列や非常に幅の広い列を縮小するか、テーブルを 2 つに分割する。InnoDB では ROW_FORMAT=DYNAMIC または COMPRESSED を使うと大きな列がページ外に移動するため有効: ALTER TABLE my_table ROW_FORMAT=DYNAMIC; innodb_page_size も考慮する。

DBAtlas で開く →

同じデータベースの他の項目