DBAtlas · Атлас эксплуатации баз данных

1118: ER_TOO_BIG_ROWSIZE: Row size too large

MySQL

Что это значит?

Размер строки определяемой таблицы превышает максимальный размер строки, допустимый подсистемой хранения. Максимальный размер строки для столбцов, не являющихся BLOB/TEXT, — 65535 байт; у InnoDB есть дополнительные лимиты, зависящие от размера страницы.

Почему возникает?

Определение множества широких столбцов (особенно длинных VARCHAR/CHAR); каждый символ занимает до 4 байт в многобайтовых кодировках, таких как utf8mb4; либо большие столбцы, хранящиеся внутри строки в форматах строк COMPACT/REDUNDANT InnoDB.

Как исправить

Преобразуйте часть больших столбцов в TEXT/BLOB (их можно хранить вне страницы); уменьшите ненужные или очень широкие столбцы либо разделите таблицу на две. В InnoDB помогает ROW_FORMAT=DYNAMIC или COMPRESSED, вынося большие столбцы за пределы страницы: ALTER TABLE my_table ROW_FORMAT=DYNAMIC; Также учитывайте innodb_page_size.

Открыть в DBAtlas →

Ещё по этой СУБД