Преобразование таблицы из латиницы 1 в UTF-8, ключ слишком большая проблема - PullRequest
0 голосов
/ 25 мая 2011

Я пытаюсь преобразовать некоторые из моих таблиц БД из набора символов latin1 в utf-8. Многие таблицы были преобразованы нормально, но некоторые таблицы возвращают эту ошибку:

изменить таблицу XYZ конвертировать в набор символов UTF8; ОШИБКА 1118 (42000): слишком большой размер строки. Максимальный размер строки для используемого типа таблицы, не считая BLOB, составляет 65535. Некоторые столбцы необходимо изменить на TEXT или BLOB

Есть ли способ обойти это? Какие минимальные размеры столбцов я должен иметь в таблицах, чтобы преобразование происходило без проблем? А также, как я могу изменить столбцы, которые мне нужно изменить, не разбивая данные в таблице?

Вот, кстати, таблица.

mysql> describe trailheads;
+-----------------------+----------------+------+-----+---------+----------------+
| Field                 | Type           | Null | Key | Default | Extra          |
+-----------------------+----------------+------+-----+---------+----------------+
| trailhead_id          | int(10)        | NO   | PRI | NULL    | auto_increment |
| trail_id              | int(10)        | YES  |     | NULL    |                |
| park_id               | int(10)        | YES  |     | NULL    |                |
| editor_member_id      | int(10)        | NO   |     | NULL    |                |
| trailhead_name        | varchar(1000)  | NO   |     | NULL    |                |
| trailhead_description | varchar(20000) | YES  |     | NULL    |                |
| parking               | tinyint(1)     | YES  |     | NULL    |                |
| parking_spots         | int(5)         | YES  |     | NULL    |                |
| is_free               | tinyint(1)     | YES  |     | NULL    |                |
| cost_details          | varchar(5000)  | YES  |     | NULL    |                |
| lat                   | float(9,6)     | NO   |     | NULL    |                |
| lng                   | float(9,6)     | NO   |     | NULL    |                |
| bathrooms_nearby      | tinyint(1)     | YES  |     | NULL    |                |
| wheelchair_accessible | tinyint(1)     | YES  |     | NULL    |                |
| date_added            | date           | NO   |     | NULL    |                |
| last_edit_date        | date           | YES  |     | NULL    |                |
+-----------------------+----------------+------+-----+---------+----------------+

1 Ответ

4 голосов
/ 25 мая 2011

Возможно, проблема в поле trailhead_description.

В более новых версиях mySQL длина поля VARCHAR обозначает максимальное количество символов , а не байтов .

Поскольку символ UTF-8 может иметь длину до четырех байтов, символ 20000 VARCHAR может занимать до 80 000 байтов, что явно превышает максимальный предел.

Изменение этого столбца на TEXT должно работать.

...