Tôi đang chạy máy chủ MySQL trên Macbook của mình (để thử nghiệm). Phiên bản là 5.6.20 từ Homebrew. Tôi bắt đầu gặp phải lỗi "Kích thước hàng quá lớn" và tôi đã có thể giảm nó xuống trường hợp thử nghiệm này. Bàn:
mysql> describe test;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| stuff | longtext | YES | | NULL | |
+-------+----------+------+-----+---------+----------------+
Bảng trạng thái:
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 | | |
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
Lỗi tôi gặp phải khi tôi cố gắng chèn một hàng vào bảng trong đó stuff
cột có hơn 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.
Tôi đã tìm kiếm xung quanh cho lỗi này, hầu hết các câu trả lời liên quan đến việc có quá nhiều cột văn bản và mỗi cột có 768 byte được lưu trữ nội tuyến. Như bạn thấy, đó không phải là trường hợp của tôi. Ngoài ra, số 5033932 vẫn giữ nguyên cho dù số lượng cột tôi có trong bảng là bao nhiêu. Trong ứng dụng ban đầu của tôi, có năm cột và các cập nhật vẫn không thành công khi kích thước cột vượt quá 5033932.
Tôi cũng đã thấy mọi người giải quyết vấn đề bằng cách chuyển đổi định dạng hàng, tôi sẽ thử một chút, nhưng tôi muốn hiểu chính xác điều gì gây ra lỗi này.
Cảm ơn trước!