Přijatá odpověď je chybná (nebo alespoň dost zaujatá) – osobně nechci, aby byla data uložena mimo svou databázi, protože to vytváří komplikace, pokud jde o procedury zálohování a transakční dotazy.
Jak upozornili jiní, manuál opakovaně uvádí, že sloupce BLOB a TEXT se nezapočítávají do celkové velikosti řádku, ale bohužel s výchozím nastavením konfigurace to není pravda a nakonec dostanete tuto chybovou zprávu. (Chybová zpráva nedává žádný smysl, protože vám říká, abyste k vyřešení problému použili TEXT místo VARCHAR – což už jste.)
Důvodem tohoto omezení je výchozí mechanismus úložiště, Antelope , který ukládá prvních 768 bajtů sloupců s proměnnou délkou v řádku - a možným řešením je použít INNODB a přepnout svůj úložný mechanismus na alternativní Barracuda úložný mechanismus:
SET GLOBAL innodb_file_format=Barracuda;
Toto nebude mít žádný okamžitý účinek, protože toto nastavení je výchozí pro nové databázové soubory – takže budete muset celou databázi zahodit a znovu vytvořit.
Případně přepněte na Barracuda (jak je uvedeno výše) a poté (navíc) přepněte na strategii soubor-na-tabulku:
SET GLOBAL innodb_file_per_table=ON;
Opět to nebude mít žádný okamžitý účinek, protože obě nastavení jsou výchozí pro nové tabulky – takže znovu budete muset tabulku zrušit a znovu vytvořit.
Pokud se poté podíváte do složky MySQL data, můžete potvrdit, že byly vytvořeny samostatné soubory, např. pro databázi s názvem „data“ a tabulku s názvem „test“ byste měli vidět soubor s názvem „data/test/bigtable.ibd“.
Pokud se vám nelíbí změna globálního nastavení v MySQL, zkuste SET SESSION
místo SET GLOBAL
, např. těsně před spuštěním CREATE TABLE
prohlášení.