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 も考慮する。
同じデータベースの他の項目
- 1290ER_OPTION_PREVENTS_STATEMENT: running with the --read-only option(--read-only オプションで稼働中)
- 1836ER_READ_ONLY_MODE: Running in read-only mode(読み取り専用モードで稼働中)
- 3819ER_CHECK_CONSTRAINT_VIOLATED: Check constraint is violated(CHECK 制約違反)
- 1170ER_BLOB_KEY_WITHOUT_LENGTH: BLOB/TEXT column used in key specification without a key length(キー長を指定せずに BLOB/TEXT 列をキーに使用)
- 1592ER_BINLOG_UNSAFE_STATEMENT: Unsafe statement written to the binary log(安全でない文がバイナリログに書き込まれた)
- 3140ER_INVALID_JSON_TEXT: Invalid JSON text(無効な JSON テキスト)
- 1526ER_NO_PARTITION_FOR_GIVEN_VALUE: Table has no partition for value(値に対応するパーティションがない)