Ich verwende einen MySQL-Server auf meinem Macbook (zum Testen). Version ist 5.6.20 von Homebrew. Ich habe angefangen, Fehler "Zeilengröße zu groß" zu finden, und ich konnte sie auf diesen Testfall reduzieren. Tabelle:
mysql> describe test;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| stuff | longtext | YES | | NULL | |
+-------+----------+------+-----+---------+----------------+
Tabellenstatus:
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 | | |
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
Der Fehler wird stuff
angezeigt , wenn ich versuche, eine Zeile in die Tabelle einzufügen, in der die Spalte mehr als 5033932 Byte enthält.
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.
Ich habe nach diesem Fehler gesucht. Die meisten Antworten beinhalten zu viele TEXT-Spalten, und in jeder sind 768 Bytes inline gespeichert. Wie Sie sehen, ist das bei mir nicht der Fall. Außerdem bleibt die Nummer 5033932 unabhängig von der Anzahl der Spalten in der Tabelle gleich. In meiner ursprünglichen Anwendung gab es fünf Spalten, und die Aktualisierungen schlugen immer noch fehl, wenn die Spaltengröße 5033932 überschritt.
Ich habe auch Leute gesehen, die das Problem durch Wechseln der Zeilenformate gelöst haben, was ich gleich versuchen werde, aber ich möchte genau verstehen, was diesen Fehler verursacht.
Danke im Voraus!