Конвертирование базы данных MySQL из одного charset в другой

Быстрый способ преобразования charset базы данных MySQL

Недавно мне пришлось столкнуться с задачей перевода базы данных из одного charset в другой. Исходная база была в iso-8859-1, предстояло перевести её в utf-8. Задача усложнялась тем, что в исходной базе присутствовали символы из других языков (русский, испанский и, возможно, китайский). Погуляв по Интернету и поискав в Google, я нашёл несколько решений. Способ, который мне [...]

← Вернуться к полной версии записи «Конвертирование базы данных MySQL из одного charset в другой»…

Автор: ; опубликовано в: MySQL; метки: convert, MySQL, utf8, база данных, преобразование
9
Мар
2008

RSS Комментарии к статье «Конвертирование базы данных MySQL из одного charset в другой» (6)  »

  1. bb

    В меморис!

    Вот спасибо тебе мил человек. Очень пригодилась твоя “заметка”.

    Пиши еще!

  2. Alex

    Метод из документации будет работать ТОЛЬКО есть данные в базе лежат в той же кодировке, которая объявлена для поля БД.
    Старые версии Вордпресса хранят данные в кодировке UTF8 в таблицах с кодировкой latin1 (при обновлении версии даже запрещается добавлять в старый конфиг константы CHARSET и COLLATION, как в новых версиях).
    Поэтому простой ALTER .. CONVERT не будет работать (он преобразует двухбайтовые символы в два разных символа). В этом случае сработает только конвертирование с использованием BLOB (2 пункт). При этом данные представляются просто как битовый поток, а потом к ним применяется перекодирование в UTF. А так как они до этого были записаны в UTF, то все закончится удачно. (К стати есть для этого скрипт, который находит текстовые поля и конвертирует их через BLOB в UTF, да и самому такой написать не большая проблема). Iconv по идее тоже не сработает (будет то же самое, как с CONVERT), но я не проверял…

    • Alex, на самом деле вариантов здесь гораздо больше: всё зависит от charset’а базы, таблицы и соединения.

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

      Сейчас я пишу подробный обзор на эту тему.

  3. chaky

    первый способ прокатил, но без шага с iconv и без ALTER DATABASE `database_utf8` COLLATE ‘utf8_general_ci’

    в любом случае, спасибо за подсказку.

  4. Спасибо, коллега! Крайне помогло.
    У меня конвертирование было с осложнениями. База в latin1, а содержимое таблиц в cp1251!

  5. Alex

    недавно тоже столкнулся с проблемой конвертации базы. оказалось всё не так радужно. Для простых таблиц это проходит, а если в базе храняться сериализированные данные – то такой подход неприемлем.

Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.

Оставить комментарий к записи «Конвертирование базы данных MySQL из одного charset в другой»

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя

गते गते पारगते पारसंगते बोधि स्वाहा