MySQL и кодировка. Миграция (или деградация)

Сегодня я столкнулся с переносом данных между двумя серверами: MySQL 4.0 на FreeBSD (доступ через SSH) и MySQL 5.0 на Windows XP локально (базовый пакет XAMPP Web Servers). В общем не суть важно… Все мы знаем, что при любом импорте и экспорте данных из одной базы данных в другую, возникают проблемы с русскими буквами. Вы наверняка сталкивались с кучей статей по этому поводу, и все они хорошие, но сегодня я ушел чуть глубже.

Задача была простая - удалить пару строк из одной таблички на удалённом веб-сервере. Поставить phpmyadmin и решить вопрос за 2-3 минуты.. А можно было отследить первичные ключи требуемых записей и простым запросом на удалённом сервере их удалить. Слишком уж всё это просто. Я пошёл иным путём.

На FreeBSD:

mysqldump -u -p --default-character-set=cp1251 dbname tablename > dump_table.sql


Следующий этап я делаю на сервере FreeBSD, т.к. глючный виндовый блокнот будет три часа 10 метров открывать. Альтернатива - UNIX редактор vi:

vi dump_table.sql


Добавляем две строчки в начало файла:

SET NAMES cp1251;
SET CHARACTER SET cp1251;


Затем я скачал файл себе на компьютер, а здесь уже через mysql.exe импортировал его в свою локальную базу данных. Открываю в MySQL Query Browser, русский текст! Ура! Но это еще только начало… Удалил пару строк. Обратный экспорт в MySQL 4.0 не получился. Точнее получился, только китайский. MySQL Administrator с этим тоже не справился, хотя настройки все верны. Пробуем:

mysqldump -u -p dbname tablename > dump_table.sql


Во-первых MySQL 4.0 сразу начинает ругаться на команды SET NAMES и SET CHARACTER SET и DEFAULT CHARSET. Не было таких в его времена (только не спрашивайте где я нашел такой древний хостинг). Эти строчки можно вручную удалить если дамп не большой. А что делать если вы экспортируете таблиц 100? Всё просто - включаем обратную совместимость в MySQL:

mysqldump -u -p --compatible=mysql40 dbname tablename > dump_table.sql


Уже лучше. Но русский язык так и не появился. Можно выставить принудительную кодировку при экспорте:

mysqldump -u -p --compatible=mysql40 --default-character-set=cp1251 dbname tablename > dump_table.sql


И тут понеслось… Ошибка: mysqldump: Character set ‘cp12512 is not a compiled character set and is not specified in the ‘C:\mysql\\share\charsets\Index.xml’ file. Здесь я начал ковырять my.cnf, добавлять различные строки, указывающие на пути к кодировкам, всё согласно инструкции на официальном сайте MySQL 5. Нет, ничего не помогло… Программы mysql.exe и mysqldump.exe вообще никак на мой конфигурационный файл не реагировали. Параметр –defaults-file тоже не помог.

Ну и вот собственно решение:

mysqldump --character-sets-dir=C:/xampp/mysql/share/charsets/ --default-character-set=cp1251 -u -p dbname tablename > dump_table.sql

Читать комменты и комментировать

Добавить комментарий / отзыв



Защитный код
Обновить

MySQL и кодировка. Миграция (или деградация) | | 2010-09-09 00:18:39 | | Базы данных | | Сегодня я столкнулся с переносом данных между двумя серверами: MySQL 4.0 на FreeBSD (доступ через SSH) и MySQL 5.0 на Windows XP локально (базовый пакет XAMPP Web Servers). В общем не суть важно… Все | РэдЛайн, создание сайта, заказать сайт, разработка сайтов, реклама в Интернете, продвижение, маркетинговые исследования, дизайн студия, веб дизайн, раскрутка сайта, создать сайт компании, сделать сайт, создание сайтов, изготовление сайта, обслуживание сайтов, изготовление сайтов, заказать интернет сайт, создать сайт, изготовить сайт, разработка сайта, web студия, создание веб сайта, поддержка сайта, сайт на заказ, сопровождение сайта, дизайн сайта, сайт под ключ, заказ сайта, реклама сайта, хостинг, регистрация доменов, хабаровск, краснодар, москва, комсомольск |
 
Поделиться с друзьями: