У нас есть несколько инженеров, которые объединяют нормализованную структуру БД во временную таблицу для создания отчета. Столбцы указаны как TEXT NOT NULL
(я знаю, «почему они это делают?»; Давайте просто предположим, что мы обращаемся к этому).
Мы используем MySQL 5.1.48 Community RHEL5 с плагином InnoDB 1.0.9 в Linux.
При использовании MyISAM мы никогда не сталкивались с предельными размерами таблицы максимальными столбцами или максимальной длиной строки (во время исследования мы достигли максимального значения столбцов 2598 (2599th вызывает ошибку 1117). С InnoDB мы достигаем пределов. Эти ограничения проявляются при создании таблица (без вставки данных) как:
ОШИБКА 1118 (42000) в строке 1: слишком большой размер строки. Максимальный размер строки для используемого типа таблицы, не считая больших двоичных объектов, составляет 8126. Некоторые столбцы необходимо изменить на TEXT или BLOB.
Я ищу ответы на следующие вопросы:
Какова детальная формула для определения размера строки при использовании партий столбцов v / v / b / t? Я пробовал несколько различных формул, используя
varchar(N)
столбцы (где N находится между 1 и 512), кодировку UTF8 (* 3) и столько столбцов, сколько таблица займет до сбоя. Ни одна из комбинаций, которые я пробовал, не дает значений, которые соответствуют реальным результатам теста.Какие еще «накладные расходы» следует учитывать при расчете размера строки?
Почему сообщение об ошибке меняется с 8126 на 65535 при переходе от создания таблиц со столбцами varchar (109) к столбцам varchar (110)?