Estou executando um servidor MySQL no meu Macbook (para teste). A versão é 5.6.20 do Homebrew. Comecei a executar erros de "tamanho da linha muito grande" e pude reduzi-lo a este caso de teste. Mesa:
mysql> describe test;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| stuff | longtext | YES | | NULL | |
+-------+----------+------+-----+---------+----------------+
Status da tabela:
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 | | |
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
O erro que estou recebendo quando tento inserir uma linha na tabela em que a stuff
coluna tem mais de 5033932 bytes.
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.
Eu procurei esse erro, a maioria das respostas envolve ter muitas colunas TEXT e cada uma possui 768 bytes armazenados em linha. Como você pode ver, esse não é o meu caso. Além disso, o número 5033932 permanece o mesmo, independentemente do número de colunas que tenho na tabela. No meu aplicativo original, havia cinco colunas e as atualizações ainda falharam quando o tamanho da coluna excedeu 5033932.
Também vi pessoas resolverem o problema alternando os formatos de linha, que tentarei um pouco, mas gostaria de entender exatamente o que está causando esse erro.
Desde já, obrigado!