Macbook에서 테스트를 위해 MySQL 서버를 실행하고 있습니다. 버전은 Homebrew에서 5.6.20입니다. "행 크기가 너무 큼"오류가 발생하기 시작했으며이 테스트 사례로 줄일 수있었습니다. 표:
mysql> describe test;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| stuff | longtext | YES | | NULL | |
+-------+----------+------+-----+---------+----------------+
테이블 상태 :
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
열이 5033932 바이트를 초과 하는 테이블에 행을 삽입하려고 할 때 발생하는 오류 입니다.
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.
이 오류를 검색했으며 대부분의 답변에 너무 많은 TEXT 열이 포함되어 있으며 각 열에 768 바이트가 인라인으로 저장되어 있습니다. 보시다시피, 그것은 나에게 해당되지 않습니다. 또한 숫자 5033932는 테이블에있는 열 수에 관계없이 동일하게 유지됩니다. 원래 응용 프로그램에는 5 개의 열이 있었으며 열 크기가 5033932를 초과하면 업데이트가 계속 실패했습니다.
또한 사람들이 행 형식을 전환하여 문제를 해결하는 것을 보았습니다.이 형식은 조금 시도하지만이 오류의 원인을 정확하게 이해하고 싶습니다.
미리 감사드립니다!