4Debian.Info - Портал русскогоязычного сообщества Debian Карта сайта Контакты

Меню

Репозитории Debian

Скачать Debian

Установка Debian - Видео



Авторизация:

Новые статьи

Статьи в RSS

Новые комментарии

Новые уроки

Уроки в RSS


Вернутся к списку статей

Конвертируем базу MySQL из cp1251 в UTF-8 (репетиторы испанского языка)

Не смотря на то, что в настоящее время почти повсеместно используется кодировка UTF-8, ещё случаются иногда курьёзные случаи с кодировками.



Недавно столкнулся с проблемой такого рода. Сервер базы данных работал в cp1251. Кодировка базы данных и всех её таблиц - UTF-8. На веб-сервере работало приложение на PHP, которое само по себе оперировало информацией в базе данных тоже в кодировке UTF-8. Беда в том, что в переменных окружения веб-сервера тоже стояла кодировка cp1251. Сервер базы данных общался с клиентом базы данных, думая что оба они работают с информацией в кодировке cp1251, хотя по факту информация была в UTF-8. Соответственно, никаких проблем не наблюдалось до тех пор, пока к серверу баз данных не подключился клиент, который захотел общаться в кодировке, отличной от cp1251. Клиент получал что угодно, но только не текст в запрошенной кодировке.

Чтобы исправить ситуацию, в веб-приложении пришлось сразу после подключения к базе данных задавать желаемую кодировку запросом "SET CHARACTER SET 'UTF8'". Осталось перекодировать данные.

Сначала снимем дамп с базы данных, запросив данные в кодировке cp1251. На самом деле они сольются в той кодировке, которой пользовалось веб-приложение. В данном случае это UTF-8.

Создаем дамп базы MySQL в cp1251 коммандой:

bash:
  1. mysqldump --default-character-set=cp1251 -u root -p base | grep -vE "^/*" > base.sql

Из дампа попутно удаляются все строки, начинающиеся с символов "/*" - это директивы, задающие настройки кодировок при импорте-экспорте.

Теперь запустим консольный клиент, и создадим пустую базу данных в кодировке UTF-8:
bash:
  1. mysql -u root -p
  2. > CREATE DATABASE base2 CHARACTER SET utf8 COLLATE utf8_general_ci;

Осталось выбрать кодировку, в которой хранится информация в дампе и залить в новую базу данных ранее сохранённый дамп. В нашем случае это опять UTF-8.
bash:
  1. > charset utf8;
  2. > use base2;
  3. > source base.sql

Теперь можно выбирать в клиенте ту кодировку, которая стоит в терминале, и видеть текст. В моём случае в терминале была настроена кодировка KOI8-R:
bash:
  1. > charset koi8r;
  2. > select * from table_name limit 10;

Если всё сделано правильно, можно повторить восстановление дампа уже в основную базу и удалить тестовую базу данных:
bash:
  1. > drop database base;
  2. > create database base charset utf8;
  3. > charset utf8;
  4. > source base.sql
  5. > drop database base2;


Те у кого отсутствует доступ к консоли (shell,ssh),можно воспользоваться PHP решением:

php:
  1. <?
  2. $text = file_get_contents ("base.sql");
  3. $text = iconv ("cp1251", "UTF-8", $text);
  4. $f = fopen ("utf8base.sql","w");
  5. fwrite ($txt,$f);
  6. fclose ($f);

Для того,чтоб перекодировать файл из консоли (shell,ssh) необходимо:

php:
  1. iconv -f utf8 -t cp1251 utf8base.sql > base.sql

Если Вам необходима настройка сервера, обновление программ и библиотек, а так же разработка специальных интернет-программ, то рекомендуем Вам обратиться в компанию Главиндекс, которая предлагает такие услуги, как создание и продвижение сайтов "под ключ". Вы получите качественный результат в сжатые сроки.

Комментарии: Конвертируем базу MySQL из cp1251 в UTF-8 (репетиторы испанского языка)

Только авторизованные пользователи могут оставлять комментарии!

Авторизация или Быстрая регистрация



Яндекс.Метрика
4Debian.Info
При полной или частичной перепечатке текстов статей и публикаций гиперссылка на www.4debian.info обязательна. | "4Debian.Info" | © 2017