Перенос старой базы данных MySQL 3.23.49 в базу данных MySQL 5.0.51 - кодирование в ANSI и UTF-8 - PullRequest
4 голосов
/ 17 ноября 2011

Я хочу перенести базу данных MySQL 3.23.49 в базу данных MySQL 5.0.51.Теперь я экспортировал файл SQL и готов к импорту.Я посмотрел в sql-файл и Notepad ++ показывает мне, что файлы закодированы в ANSI.Я посмотрел на значения, и некоторые из них в ANSI, а некоторые в UTF-8.Как лучше всего продолжить?

  1. Стоит ли менять кодировку в Notepad ++?
  2. Стоит ли использовать ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;?
  3. Стоит ли использовать iconv?
  4. Нужно ли просматривать каждую таблицу и вносить необходимые изменения?
  5. Каковы параметры импорта?Режим совместимости с MYSQL323 и кодировка latin1?
  6. Нужно ли знать о чем-то, если php-скрипты используют другую кодировку?

Спасибо за подсказки!

Ответы [ 2 ]

5 голосов
/ 17 ноября 2011

Если проблема заключается в том, чтобы импортировать дамп mysql в кодировке utf8, решение обычно заключается в добавлении --default-character-set=utf8 к параметрам mysql:

mysql --default-character-set=utf8 -Ddbname -uuser -p < dump.sql

UPD1: в случае повреждения файла дампа, я быпопробуйте экспортировать базу данных еще раз таблица за таблицей, чтобы дамп привел к правильному файлу в кодировке utf8.

3 голосов
/ 26 ноября 2011

Четыре года назад я преобразовал базу данных MySQL 4.0 (в которой также не было понятия о кодировке символов) в MySQL 5.0, поэтому BTDT.

Но, прежде всего, нет кодировки символов "ANSI" ; это неправильное представление и неправильное употребление, которое появилось в ранних версиях Windows (есть escape-последовательности ANSI , но они не имеют ничего общего с кодировкой символов). Вы наверняка смотрите на Windows ‑ 1252 кодированный текст. Вы должны преобразовать этот текст в UTF ‑ 8, так как тогда у вас будет больше шансов сохранить все используемые символы в целости (UTF ‑ 8 - это кодировка Unicode , а Unicode содержит все символы, которые можно кодировать с помощью Windows-125x , но в разных точках кода).

Я использовал обе программы iconv и recode (в системе Debian GNU / Linux, на которой работал сервер MySQL) для преобразования закодированного в Windows ‑ 1252 текста экспорта MySQL (созданного phpMyAdmin) в UTF -8. Используйте любую программу или комбинацию программ, которая вам больше подходит.

Что касается ваших вопросов:

  1. Вы можете попробовать, но это может не сработать. В частности, у вас могут возникнуть проблемы с открытием большого дампа базы данных с помощью Notepad ++ или другого текстового редактора.
  2. Зависит. ALTER TABLE … CONVERT TO … делает больше, чем просто преобразование кодировок.
  3. См. Параграф выше.
  4. Да. Вы должны установить кодировку символов каждой таблицы и каждого текстового поля, в которое вы импортируете данные, на utf8 (используйте любое сопоставление utf8_…, соответствующее вашим целям или данным лучше всего). ALTER TABLE … CONVERT TO … делает это. (Но см. 2.)
  5. Я не думаю, что MYSQL323 имеет значение здесь, поскольку ваш экспорт будет содержать только операторы CREATE, INSERT и ALTER. Но сначала проверьте руководство (значок «?» Рядом с настройкой в ​​phpMyAdmin). latin1 означает «Windows-1252» в MySQL 5.0 , так что может работать, и вы должны пропустить руководство преобразование import затем.
  6. Я так не думаю; PHP еще не поддерживает Unicode . Важно то, как данные обрабатываются скриптом PHP. Обычно поле заголовка Content-Type для ваших сгенерированных текстовых ресурсов, использующих эти данные, должно заканчиваться на ; charset=UTF-8.

На дополнительном примечании вы больше не должны использовать MySQL 5.0.x. Текущая стабильная версия - MySQL 5.5.18 . «В соответствии с политикой жизненного цикла поддержки MySQL, активная поддержка MySQL 5.0 закончилась 31 декабря 2009 года . MySQL 5.0 сейчас находится в фазе расширенной поддержки. » Альфа-версия MySQL 5.0.0 была выпущено 2003-12-22, Расширенная поддержка, как ожидается, закончится 8 полных лет после этого, 2011‑12‑31 (в этом году) .

...