вторник, 1 марта 2016 г.

Ошибка при импорте MySQL дампа с полем VARCHAR > 255

Понадобилось импортнуть дамп, где в таблице было такое поле и движок MyISAM:
  `title` varchar(400) NOT NULL
ENGINE=MyISAM AUTO_INCREMENT=33525 DEFAULT CHARSET=utf8;

Однако столкнулся с такой ошибкой:
ERROR 1071 (42000) at line 1817: Specified key was too long; max key length is 1000 bytes

Решил проверить, поможет ли уменьшение поля title до 255:
  `title` varchar(255) NOT NULL

И вуаля дамп загрузился, однако - это плохой вариант ибо могут потеряться данные.

После поисков в интернете решил попробовать поменять ENGINE на InnoDB и получил ошибку:
ERROR 1709 (HY000) at line 1817: Index column size too large. The maximum column size is 767 bytes.



В некоторых источниках говорится, что спасет установка параметра innodb_large_prefix в ON:
# mysql -uroot -p -e "set global innodb_large_prefix = ON;"

Однако и этот финт ушами не прокатил, тогда нашлось еще решение:
# mysql -uroot -p -e "set global innodb_file_format = BARRACUDA;"

И в дампе в строке с ENGINE у таблицы, дописать формат файла:
 ENGINE=InnoDB AUTO_INCREMENT=33525 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

После чего, дамп успешно загрузился в базу.
Не забудем вернуть параметры взад:
# mysql -uroot -p -e "set global innodb_large_prefix = OFF;"
# mysql -uroot -p -e "set global innodb_file_format = Antelope;" // В моем случае был задан Antelope

Комментариев нет:

Отправить комментарий