Saya menjalankan server MySQL di Macbook saya (untuk pengujian). Versi 5.6.20 dari Homebrew. Saya mulai mengalami kesalahan "Ukuran baris terlalu besar", dan saya bisa menguranginya ke kasus uji ini. Meja:
mysql> describe test;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| stuff | longtext | YES | | NULL | |
+-------+----------+------+-----+---------+----------------+
Status tabel:
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 | | |
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
Kesalahan yang saya dapatkan saat mencoba memasukkan baris ke tabel di mana stuff
kolom memiliki lebih dari 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.
Saya telah mencari-cari kesalahan ini, sebagian besar jawabannya melibatkan terlalu banyak kolom TEKS, dan masing-masing memiliki 768 byte yang disimpan sebaris. Seperti yang Anda lihat, bukan itu masalahnya bagi saya. Juga, nomor 5033932 tetap sama terlepas dari jumlah kolom yang saya miliki di tabel. Dalam aplikasi asli saya, ada lima kolom, dan pembaruan masih gagal ketika ukuran kolom melebihi 5033932.
Saya juga melihat orang menyelesaikan masalah dengan mengganti format baris, yang akan saya coba sedikit, tetapi saya ingin memahami persis apa yang menyebabkan kesalahan ini.
Terima kasih sebelumnya!