MySQL, изменение таблицы с Latin-1 на UTF-8 - PullRequest
0 голосов
/ 15 июня 2010

Я хотел бы убрать новые записи в моей базе данных символов Latin-1 и просто разрешить UTF-8. Я планирую изменить таблицу и внести следующие изменения:

Charset: latin1 -> utf-8

Сортировка: latin1_swdish_ci -> utf8_general_ci

В рассматриваемой таблице 1 миллион строк. Это хорошая идея? Каковы риски этого? Что происходит с данными, которые я пытаюсь ввести, которых нет в utf-8? Что происходит с ранее введенными данными, отличными от utf-8?

Ответы [ 2 ]

3 голосов
/ 15 июня 2010

Вы должны создать дубликат таблицы, запустить транзакцию, вставить все строки из старой таблицы, а затем зафиксировать. Самый безопасный способ.

Подведем итог:

CREATE TABLE duplicate ... (with the charset you like, etc)

SET AUTOCOMMIT=0;
START TRANSACTION;
INSERT INTO duplicate (...field-list...)
   SELECT (...field-list...) from original_table;
COMMIT;

ALTER TABLE original RENAME TO original_backup;
ALTER TABLE duplicate RENAME TO original;

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

0 голосов
/ 20 мая 2016

Другой способ - ИЗМЕНИТЬ кодировку.Следующие 2 оператора должны преобразовать вашу таблицу и все столбцы.

ALTER TABLE schema.table_name CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE schema.table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

Если у вас есть внешний ключ, хотя имейте в виду, что вам нужно его отбросить, запустите приведенный выше SQL, а затем создайте его заново.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...