Приетият отговор е грешен (или поне доста убеден) - аз лично не искам данни да се съхраняват извън моята база данни, тъй като това създава усложнения по отношение на процедурите за архивиране и транзакционни заявки.
Както други посочиха, в ръководството многократно се посочва, че колоните BLOB и TEXT не се отчитат към общия размер на реда, но за съжаление, с настройките за конфигурация по подразбиране, това не е вярно и в крайна сметка получавате това съобщение за грешка. (Съобщението за грешка няма никакъв смисъл, защото ви казва да използвате TEXT вместо VARCHAR, за да разрешите проблема – който вече сте.)
Причината за това ограничение е механизмът за съхранение по подразбиране, Antelope , който съхранява първите 768 байта колони с променлива дължина в реда - и възможно решение е да използвате INNODB и да превключите своя механизъм за съхранение към алтернативния Barracuda механизъм за съхранение:
SET GLOBAL innodb_file_format=Barracuda;
Това няма да има незабавен ефект, тъй като тази настройка е по подразбиране за новите файлове на базата данни - така че ще трябва да премахнете и да създадете отново цялата си база данни.
Като алтернатива, превключете към Barracuda (както по-горе) и след това (в допълнение) превключете към стратегията файл на маса:
SET GLOBAL innodb_file_per_table=ON;
Отново, това няма да има незабавен ефект, тъй като и двете настройки са по подразбиране за нови таблици - така че отново ще трябва да пуснете и да създадете отново таблицата.
Ако погледнете в папката с данни на MySQL, след като направите това, можете да потвърдите, че са създадени отделни файлове, напр. за база данни с име "data" и таблица с име "test", трябва да видите файл с име "data/test/bigtable.ibd".
Ако не ви харесва да променяте глобалните настройки в MySQL, опитайте SET SESSION
вместо SET GLOBAL
, напр. непосредствено преди да стартирате вашия CREATE TABLE
изявления.