Frågan har ställts på serverfel också.
Du kanske vill ta en titt på denna artikel som förklarar mycket om MySQL-radstorlekar. Det är viktigt att notera att även om du använder TEXT- eller BLOB-fält, kan din radstorlek fortfarande vara över 8K (gräns för InnoDB) eftersom den lagrar de första 768 byten för varje fält inline på sidan.
Det enklaste sättet att åtgärda detta är att använda Barracuda-filformatet med InnoDB. Detta eliminerar i princip problemet helt och hållet genom att bara lagra pekaren på 20 byte till textdata istället för att lagra de första 768 byten.
Metoden som fungerade för OP där var:
-
Lägg till följande i
my.cnf
fil under[mysqld]
avsnitt.innodb_file_per_table=1 innodb_file_format = Barracuda
-
ALTER
tabellen för att användaROW_FORMAT=COMPRESSED
.ALTER TABLE nombre_tabla ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
Det finns en möjlighet att ovanstående fortfarande inte löser dina problem. Det är en känd (och verifierad) bugg
med InnoDB motor, och en tillfällig lösning för nu är att falla tillbaka till MyISAM motor som tillfällig förvaring. Så i din my.cnf
fil:
internal_tmp_disk_storage_engine=MyISAM