sql >> Databasteknik >  >> RDS >> Mysql

Ändra gränsen för Mysql-radstorleken för stor

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:

  1. Lägg till följande i my.cnf fil under [mysqld] avsnitt.

    innodb_file_per_table=1
    innodb_file_format = Barracuda
    
  2. ALTER tabellen för att använda ROW_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


  1. Microsoft SQL Server 2005/2008:XML vs text/varchar datatyp

  2. Ad-hoc anslutningssträngar och heterogena frågor för MS Access

  3. Hur man jämför två scheman i PostgreSQL

  4. Bulk Infoga delvis citerad CSV-fil i SQL Server