Przyjęta odpowiedź jest błędna (lub przynajmniej dość opiniotwórcza) - osobiście nie chcę, aby dane były przechowywane poza moją bazą danych, ponieważ powoduje to komplikacje w zakresie procedur tworzenia kopii zapasowych i zapytań transakcyjnych.
Jak zauważyli inni, podręcznik wielokrotnie stwierdza, że kolumny BLOB i TEXT nie liczą się do całkowitego rozmiaru wiersza, ale niestety przy domyślnych ustawieniach konfiguracji nie jest to prawdą i w końcu otrzymujesz ten komunikat o błędzie. (Komunikat o błędzie nie ma żadnego sensu, ponieważ mówi ci, aby użyć TEXT zamiast VARCHAR do rozwiązania problemu - którym już jesteś).
Powodem tego ograniczenia jest domyślny mechanizm przechowywania, Antylopa , który przechowuje pierwsze 768 bajtów kolumn o zmiennej długości w wierszu — a możliwym rozwiązaniem jest użycie INNODB i przełączenie mechanizmu przechowywania na alternatywny Barrakuda mechanizm przechowywania:
SET GLOBAL innodb_file_format=Barracuda;
Nie przyniesie to natychmiastowego efektu, ponieważ to ustawienie jest domyślne dla nowych plików bazy danych - więc będziesz musiał usunąć i odtworzyć całą bazę danych.
Alternatywnie, przełącz się na Barracuda (jak wyżej), a następnie (dodatkowo) przełącz się na strategię plik na tabelę:
SET GLOBAL innodb_file_per_table=ON;
Ponownie, nie przyniesie to natychmiastowego efektu, ponieważ oba ustawienia są domyślne dla nowych tabel - więc znowu będziesz musiał usunąć i ponownie utworzyć tabelę.
Jeśli po wykonaniu tej czynności zajrzysz do folderu danych MySQL, możesz potwierdzić, że zostały utworzone osobne pliki, np. dla bazy danych o nazwie "data" i tabeli o nazwie "test", powinieneś zobaczyć plik o nazwie "data/test/bigtable.ibd".
Jeśli nie lubisz zmieniać globalnych ustawień w MySQL, spróbuj SET SESSION
zamiast SET GLOBAL
, np. bezpośrednio przed uruchomieniem CREATE TABLE
oświadczenia.