Estoy ejecutando un servidor MySQL en mi Macbook (para probar). La versión es 5.6.20 de Homebrew. Empecé a encontrarme con errores de "Tamaño de fila demasiado grande" y pude reducirlo a este caso de prueba. Mesa:
mysql> describe test;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| stuff | longtext | YES | | NULL | |
+-------+----------+------+-----+---------+----------------+
Estado de la tabla:
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 | | |
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
El error stuff
que obtengo cuando intento insertar una fila en la tabla donde la columna tiene más 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.
He buscado este error, la mayoría de las respuestas implican tener demasiadas columnas TEXT, y cada una tiene 768 bytes almacenados en línea. Como puede ver, ese no es el caso para mí. Además, el número 5033932 permanece igual independientemente del número de columnas que tengo en la tabla. En mi aplicación original, había cinco columnas, y las actualizaciones aún fallaban cuando el tamaño de la columna excedía 5033932.
También he visto personas resolver el problema cambiando los formatos de fila, lo que intentaré en un momento, pero me gustaría entender exactamente qué está causando este error.
¡Gracias por adelantado!