Подтвердить что ты не робот

Как преобразовать данные latin1_swedish_ci в utf8_general_ci?

У меня есть база данных MySQL со всеми настройками полей таблицы как

latin1_swedish_ci

У него почти 1000 записей уже сохранены, и теперь я хочу преобразовать все эти данные в

utf8_general_ci

Чтобы я мог отображать любой языковой контент. Я уже изменил полевые сопоставления в utf8_general_ci, но это не CONVERT все старые записи в utf8_general_ci

4b9b3361

Ответ 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;

сохраните файл и импортируйте обратно в базу данных.