Emissione con dimensione massima di righe in MySQL

Ho un problema con MySQL, ho un tavolo con molti campi di text. Quando cerco di memorizzare alcuni dati ottengo questo errore.

La dimensione della row è troppo grande. La dimensione massima della row per il tipo di tabella utilizzato, senza contare i BLOB, è 8126. È necessario modificare alcune colonne in TEXT o BLOB

  • È una ctriggers idea avere un database MySQL o SQLServer pubblicamente rivolto?
  • La variabile 'general_log_file' non può essere impostata sul valore di '/var/lib/msyql/ubuntu.log'
  • Qual è il modo più efficace per aggiungere un sacco di dati a un database mysql?
  • Come creare il file di backup del database mysql di each aggiornamento quotidiano?
  • Crittografia Mysql e gestione delle chiavi
  • Miglior approccio per la progettazione di questo grande database MySQL
  • Il text che memorizzo in each field non è troppo lungo, solo pochi paragrafi in ciascuno.

    Cosa posso fare?

    4 Solutions collect form web for “Emissione con dimensione massima di righe in MySQL”

    Grazie per la gente che risponde. I link che hai inviato erano una base molto utile per iniziare a imparare.

    Infine ho trovato questa pagina: http://download.oracle.com/docs/cd/E17952_01/refman-5.5-en/innodb-compression-usage.html

    E ho configurato my.cnf aggiungendo queste due righe nella sezione [mysqld] :

     innodb_file_per_table innodb_file_format = Barracuda 

    Poi ho ALTER mio tavolo con questo command tramite phpMyAdmin:

     ALTER TABLE nombre_tabla ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; SHOW WARNINGS; 

    È anche ansible utilizzare altre impostazioni che è ansible leggere nel collegamento qui sopra, ma questi mi hanno funzionato bene.

    Potresti voler dare un'occhiata a questo articolo che spiega molto sulle size delle righe di MySQL. È importnte notare che anche se si utilizzano campi TEXT o BLOB, la dimensione della row potrebbe ancora essere superiore a 8K (limite per InnoDB) perché memorizza i primi 768 byte per each field in linea nella pagina. Il modo più semplice per risolvere questo problema è quello di utilizzare il formato di file Barracuda con InnoDB. In pratica si libera totalmente dal problema solo memorizzando il puntatore da 20 byte ai dati di text invece di memorizzare i 768 byte secondari.

    Beh, fare come dice mysql: convertire i grandi campi da varchar a text o blob (ALTER TABLE). i campi di text si comportno molto come varchar (gli indici necessitano di lunghezza del prefisso, ma comunque funzionano), ma vengono memorizzati separatamente.

    Questo riferimento indica i limiti esatti di each motore di tabella mysql di riserva:

    http://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html

    Ecco tutto quello che devi sapere sui campi di text:

    http://dev.mysql.com/doc/refman/5.0/en/blob.html

    Principalmente cross-post da Stack Overflow , ma questo è un bug aperto (e verificato) nel motore InnoDB del server MySQL. Una correzione temporanea per ora è quella di ricollocare il motore MyISAM come archiviazione temporanea. Quindi, nel tuo file my.cnf:

     internal_tmp_disk_storage_engine=MyISAM 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.