Problema con la dimensione massima delle righe in MySQL


8

Ho un problema con MySQL, ho una tabella con molti campi di testo. Quando provo a memorizzare alcuni dati ottengo questo errore.

Dimensione della riga troppo grande. La dimensione massima della riga per il tipo di tabella utilizzata, senza contare i BLOB, è 8126. È necessario modificare alcune colonne in TESTO o BLOB

Il testo che memorizzo in ogni campo non è troppo lungo, solo alcuni paragrafi in ciascuno di essi.

Cosa posso fare?

Risposte:


9

Grazie per le persone che hanno risposto. I link che hai pubblicato sono stati una base molto utile per iniziare l'apprendimento.

Finalmente 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 [mysqld]sezione:

innodb_file_per_table
innodb_file_format = Barracuda

Quindi ho il ALTERmio tavolo con questo comando tramite phpMyAdmin:

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

È anche possibile utilizzare altre impostazioni che puoi leggere nel link sopra, ma queste hanno funzionato bene per me.


Non ho trovato molte informazioni su questo inconveniente di COMPRESSED e Barracuda. Perché non usarlo sempre se è meglio e risolve questo?
Ted

3

Potresti dare un'occhiata a questo articolo che spiega molto sulle dimensioni delle righe di MySQL. È importante notare che anche se si utilizzano i campi TEXT o BLOB, la dimensione della riga potrebbe essere superiore a 8 KB (limite per InnoDB) perché memorizza i primi 768 byte per ciascun campo in linea nella pagina. Il modo più semplice per risolvere questo problema è utilizzare il formato file Barracuda con InnoDB. Questo sostanzialmente elimina del tutto il problema memorizzando solo il puntatore da 20 byte nei dati di testo invece di memorizzare i primi 768 byte.


1

Bene, fai come dice mysql: converti grandi campi da varchar in testo o BLOB (ALTER TABLE). i campi di testo si comportano in modo molto simile a varchar (gli indici hanno bisogno della lunghezza del prefisso, ma funzionano comunque), ma sono memorizzati separatamente.

Questo riferimento indica i limiti esatti di ogni motore di tabella mysql di serie:

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

Ed ecco tutto da sapere sui campi di testo:

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


Grazie @korkman per la tua risposta, i miei campi erano già definiti come testo quando si è verificato il problema. Vado a vedere i tuoi suggerimenti sui link.
Memochipan,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.