Я выгрузил рабочую базу данных из приложения django и пытаюсь перенести ее в свою локальную среду разработки. На рабочем сервере работает MySQL 5.1, а локально у меня 5.6.
При переносе таблицы «messagelog» django-mailer я сталкиваюсь с ужасной ошибкой 1118:
ERROR 1118 (42000) at line 2226: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.
Я много читал в Интернете об этой ошибке, но ни одна из них не решила мою проблему.
Н.Б. Эта ошибка возникает не из-за создания таблицы, а из-за вставки строки с довольно большими данными.
Примечания:
- Для переменных innodb_file_format и innodb_file_format_max установлено значение Barracuda.
- Для ROW_FORMAT устанавливается значение DYNAMIC при создании таблицы.
В таблице не очень много столбцов. Схема ниже:
+----------------+------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------------+------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | message_data | longtext | NO | | NULL | | | when_added | datetime | NO | | NULL | | | priority | varchar(1) | NO | | NULL | | | when_attempted | datetime | NO | | NULL | | | result | varchar(1) | NO | | NULL | | | log_message | longtext | NO | | NULL | | +----------------+------------+------+-----+---------+----------------+
Опять же, ошибка возникает ТОЛЬКО, когда я пытаюсь вставить довольно большую (message_data около 5 мегабайт) строку; создание таблицы работает нормально, и до сбоя добавляется около 500 000 строк.
У меня нет идей; Я пробовал форматы строк DYANMIC и COMPRESSED и трижды проверял значения соответствующих переменных innodb:
mysql> show variables like "%innodb_file%";
+--------------------------+-----------+
| Variable_name | Value |
+--------------------------+-----------+
| innodb_file_format | Barracuda |
| innodb_file_format_check | ON |
| innodb_file_format_max | Barracuda |
| innodb_file_per_table | ON |
+--------------------------+-----------+
Код создания (из SHOW CREATE TABLE) выглядит так:
CREATE TABLE `mailer_messagelog` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`message_data` longtext NOT NULL,
`when_added` datetime NOT NULL,
`priority` varchar(1) NOT NULL,
`when_attempted` datetime NOT NULL,
`result` varchar(1) NOT NULL,
`log_message` longtext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=869906 DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC
MySQL "Row size too large" when saving many text fields
- person M Khalid Junaid   schedule 17.08.2014