MacBook'umda (test için) bir MySQL sunucusu çalıştırıyorum. Sürüm Homebrew 5.6.6. "Satır boyutu çok büyük" hatalarla karşılaşmaya başladım ve bunu bu test senaryosuna indirgedim. Tablo:
mysql> describe test;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| stuff | longtext | YES | | NULL | |
+-------+----------+------+-----+---------+----------------+
Tablo durumu:
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 | | |
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
stuff
Sütunun 5033932 bayttan fazla olduğu tabloya bir satır eklemeye çalıştığımda hata alıyorum .
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.
Bu hatayı araştırdım, cevapların çoğu çok fazla METİN sütununu içeriyor ve her birinde satır içi 768 bayt var. Gördüğünüz gibi, benim için durum böyle değil. Ayrıca, tablodaki sütun sayısından bağımsız olarak 5033932 sayısı aynı kalır. Orijinal uygulamamda beş sütun vardı ve sütun boyutu 5033932'yi aştığında güncellemeler hala başarısız oldu.
Ayrıca insanların biraz deneyeceğim satır biçimlerini değiştirerek sorunu çözdüğünü gördüm, ancak tam olarak bu hataya neyin neden olduğunu anlamak istiyorum.
Şimdiden teşekkürler!