Sto eseguendo un server MySQL sul mio Macbook (per i test). La versione è 5.6.20 da Homebrew. Ho iniziato a riscontrare errori "Dimensione riga troppo grande" e sono stato in grado di ridurlo a questo caso di prova. Tavolo:
mysql> describe test;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| stuff | longtext | YES | | NULL | |
+-------+----------+------+-----+---------+----------------+
Stato della tabella:
mysql> show table status where Name = 'test';
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
| test | InnoDB | 10 | Compact | 1 | 16384 | 16384 | 0 | 0 | 5242880 | 2 | 2014-08-28 23:51:12 | NULL | NULL | utf8_general_ci | NULL | | |
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
L'errore viene visualizzato quando provo a inserire una riga nella tabella in cui la stuff
colonna ha più di 5033932 byte.
mysql> select length(stuff) from test;
+---------------+
| length(stuff) |
+---------------+
| 5033932 |
+---------------+
mysql> update test set stuff = concat(stuff, 'a');
ERROR 1118 (42000): Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.
Ho cercato questo errore, la maggior parte delle risposte coinvolge avere troppe colonne TEXT e ognuna ha 768 byte memorizzati in linea. Come puoi vedere, non è questo il caso per me. Inoltre, il numero 5033932 rimane lo stesso indipendentemente dal numero di colonne che ho nella tabella. Nella mia applicazione originale, c'erano cinque colonne e gli aggiornamenti non riuscivano ancora quando la dimensione della colonna superava 5033932.
Ho anche visto le persone risolvere il problema cambiando i formati di riga, che proverò tra poco, ma vorrei capire esattamente cosa sta causando questo errore.
Grazie in anticipo!