Как преобразовать данные latin1_swedish_ci в utf8_general_ci?
У меня есть база данных MySQL со всеми настройками полей таблицы как
latin1_swedish_ci
У него почти 1000 записей уже сохранены, и теперь я хочу преобразовать все эти данные в
utf8_general_ci
Чтобы я мог отображать любой языковой контент. Я уже изменил полевые сопоставления в utf8_general_ci, но это не CONVERT все старые записи в utf8_general_ci
Ответы
Ответ 1
Используйте это, чтобы преобразовать существующую базу данных MySQL из одной кодировки кодировки в другую
ALTER DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Преобразование существующей таблицы из одной кодировки кодировки в другую
ALTER TABLE db_table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
CONVERT()
преобразует данные между разными наборами символов. Проверьте этот для справки
Ответ 2
одна забавная вещь.
CONVERT TO CHARSET и CONVERT()/CAST(), предложенный Anshu, будут работать нормально, если кодировка в таблице находится в правильном кодировании.
Если по какой-то причине в столбце latin1 содержится текст utf8, CONVERT() и CAST() не смогут помочь. Я "перепутал" мою базу данных с этой установкой, поэтому потратьте больше времени на решение этой проблемы.
чтобы исправить это в дополнение к преобразованию набора символов, необходимо выполнить несколько упражнений.
- "Жесткий" - это воссоздание базы данных из дампа, которая будет преобразована через консоль.
- "Простой" - преобразовать строку за строкой или таблицу по таблице:
INSERT INTO UTF8_TABLE (UTF8_FIELD)
SELECT convert(cast(convert(LATIN1_FIELD using latin1) as binary) using utf8)
FROM LATIN1_TABLE;
в принципе, оба случая будут обрабатывать строку до исходных символов, а затем - правую кодировку, что не произойдет с командой simple convert(field using encoding) from table;
.
Ответ 3
Экспортируйте свою таблицу. Оставьте стол. Откройте файл экспорта в редакторе. Отредактируйте его вручную там, где создана структура таблицы.
старый запрос:
CREATE TABLE 'message' (
'message_id' int(11) NOT NULL,
'message_thread_id' int(11) NOT NULL,
'message_from' int(11) NOT NULL,
'message_to' int(11) NOT NULL,
'message_text' longtext NOT NULL,
'message_time' varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
новый запрос: (предположим, вы хотите изменить поле message_text.)
CREATE TABLE 'message' (
'message_id' int(11) NOT NULL,
'message_thread_id' int(11) NOT NULL,
'message_from' int(11) NOT NULL,
'message_to' int(11) NOT NULL,
'message_text' longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
'message_time' varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
сохраните файл и импортируйте обратно в базу данных.