Det accepterede svar er forkert (eller i det mindste ret meningsfuldt) - jeg ønsker ikke personligt data gemt uden for min database, da det skaber komplikationer med hensyn til sikkerhedskopieringsprocedurer og transaktionsforespørgsler.
Som andre har påpeget, siger manualen gentagne gange, at BLOB- og TEXT-kolonner ikke tæller med i den samlede rækkestørrelse, men desværre, med standardkonfigurationsindstillingerne, er det ikke sandt, og du ender med at få denne fejlmeddelelse. (Fejlmeddelelsen giver ingen mening, fordi den fortæller dig, at du skal bruge TEXT i stedet for VARCHAR til at løse problemet - hvilket du allerede er.)
Årsagen til denne begrænsning er standardlagringsmekanismen, Antelope , som gemmer de første 768 bytes af kolonner med variabel længde i rækken - og en mulig løsning er at bruge INNODB og skifte din lagermekanisme til den alternative Barracuda opbevaringsmekanisme:
SET GLOBAL innodb_file_format=Barracuda;
Dette vil ikke have nogen øjeblikkelig virkning, fordi denne indstilling er en standard for nye databasefiler - så du bliver nødt til at droppe og genskabe hele din database.
Alternativt kan du skifte til Barracuda (som ovenfor) og derefter (udover) skifte til fil-per-bord-strategien:
SET GLOBAL innodb_file_per_table=ON;
Igen, dette vil ikke have nogen øjeblikkelig effekt, fordi begge indstillinger er standard for nye tabeller - så igen, du bliver nødt til at slippe og genskabe tabellen.
Hvis du kigger i MySQL-datamappen efter at have gjort dette, kan du bekræfte, at der er oprettet separate filer, f.eks. for en database med navnet "data" og en tabel med navnet "test", bør du se en fil med navnet "data/test/bigtable.ibd".
Hvis du ikke kan lide at ændre de globale indstillinger i MySQL, så prøv SET SESSION
i stedet for SET GLOBAL
, for eksempel. umiddelbart før du kører din CREATE TABLE
udsagn.