G+Читаю про оптимизацию canvas и нахожу знакомые вещи

Mysql string bug

Текст ошибки может быть такой: “SQL Error (1118): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs”.

Чтобы решить проблему в MySQL 5.5, нужно:

1) включить новый формат InnoDB файлов в my.cnf:
innodb_file_format = Barracuda
Если создаётся таблица, которая не нуждается в новых возможностях, то она будет создана в более простом формате Antelope.

2) преобразовать таблицу в новый формат строки:
ALTER TABLE tableName ENGINE = InnoDB ROW_FORMAT = Dynamic;
Формат строки Dynamic означает, что для длинных TEXT/VARCHAR, не являющихся частью primary key, в B-дереве могут хранятся только 20 байт указателя на отдельную область с данными (overflow). База сама выбирает, какие колонки держать в B-дереве, а какие слишком длинные, и нужно держать отдельно в overflow: если строка таблицы не умещается в размер половины страницы (8126 байт), то самая длинная колонка целиком помещается во внешнее хранилище. Процедура повторяется, пока все оставшиеся колонки не уместятся в размер половины страницы.

Итак, в этом формате каждая TEXT/VARCHAR колонка занимает минимум 20 байт в странице, и одна строка таблицы может содержать максимум 400 TEXT/VARCHAR полей. Колонка может занимать больше байт в странице, если там осталось место.

Чтобы в будущем MySQL выдавал ошибку при создании таблицы, если она не помещается в формат строки, включаем innodb_strict_mode в my.cnf:
innodb_strict_mode = ON
Также можно обратить внимание на sql_mode для упрощения отладки.

(c)