У нас є кілька інженерів, які згладжують нормалізовану структуру db у тимчасову таблицю для створення звіту. Стовпці вказані як TEXT NOT NULL
(я знаю, "чому вони роблять це?"; Припустимо лише, що ми вирішуємо це).
Ми використовуємо MySQL 5.1.48 Community RHEL5 із плагіном InnoDB 1.0.9 на Linux.
Під час використання MyISAM ми ніколи не стикалися з обмеженнями розміру таблиці максимальних стовпців або максимальної довжини рядків (під час розслідування ми досягли максимальної межі стовпців на рівні 2598 (2599-а викликає помилку 1117). З InnoDB ми вражаємо обмеження. Ці обмеження виявляються під час створення таблиця (без вставки даних) як:
ПОМИЛКА 1118 (42000) у рядку 1: розмір рядка занадто великий. Максимальний розмір рядка для використовуваного типу таблиці, не рахуючи BLOB, становить 8126. Ви повинні змінити деякі стовпці на TEXT або BLOBs
Я шукаю відповіді на наступне:
Яка детальна формула для визначення конкретних розмірів рядків при використанні стовпців партії v / v / b / t? Я спробував кілька різних формалів, використовуючи
varchar(N)
стовпці (де N - від 1 до 512), діаграму UTF8 (* 3) та стільки ж стовпців, скільки буде тривати таблиця до відмови. Жоден із комбінацій, які я намагався, не давав значень, які відповідають фактичним результатам тесту.Які ще «накладні витрати» слід враховувати під час обчислення розміру рядка?
Чому повідомлення про помилку змінюється з 8126 на 65535, коли я переходжу від створення таблиць із стовпцями varchar (109) до стовпців varchar (110)?