Задавайте вопросы, мы ответим
Вы не зашли.
Есть сайт на трех языках (Русский, Арабский и Английский).
[сайт работает на системе битрикс, все данные по всем трем языкам хранятся в одной базе].
Для каждого из сайтов установлена своя кодировка (windows-1251 - Рус., iso-8859-1 - Англ., windows-1256 - Араб.).
Нужно все перевести в UTF-8.
Проблемы с БД.
Слил дамп базы, перекодировал его в UTF8 с помощью notepad++ - залил обратно.
Для двух языков (русский и английский) все замечательно.
А вот арабский не встал как нужно, в базе его значения крякозябрами.
Пробовал также оставлять базу как есть, и править ее следующим образом:
ALTER TABLE {тут все таблицы} CONVERT TO CHARACTER SET utf8;
ALTER TABLE {тут все таблицы} DEFAULT CHARACTER SET utf8;
ALTER DATABASE {моя бд} DEFAULT CHARACTER SET utf8;
Получилось еще хуже, кириллица не конвертировалась тоже.
Подскажите, что еще можно попробовать?
Заранее спасибо
Неактивен
А таблицы для разных языков — разные? Или все три кодировки писались в одну
таблицу latin1?
Неактивен
Есть отдельные таблицы - а есть смешанные, где все три языка в своей кодировке сохранены в рамках одной таблицы
Неактивен
сравнение для всех таблиц задано cp1251_general_ci
Неактивен
Ну вот поэтому русский и сохранился.
Боюсь, что задача у Вас достаточно сложная, и во многом ручная. Нужно
выбрать из таблиц отдельно русские и отдельно арабские строки и конвертировать
в utf8 из соответствующих кодировок отдельно. Если есть какой-то флажок языка,
то можно потаблично делать как-то так:
Неактивен
Спасибо большое за столь подробный ответ, Paulus.
Сегодня буду пробовать
Неактивен
При просмотре арабской части базы или при просмотре экспорта вижу белиберду.
При переключении кодировки браузера на windows-1256 (в которой она должна быть сохранена) вижу арабские символы, но беспорядочно разбросанные - т.е. опять белиберду.
Вопрос пока такой: как корректно выгрузить таблицу из базы с указанием кодировки?
Неактивен
Если под выгрузкой Вы понимаете «сделать выборку в текстовый файл», то простых
способов нету: Вы храните данные в кодировке cp1256 в таблице, которая подписана
кодировкой cp1251. При обычном резервном копировании данные конвертируются в
универсальную кодировку utf8 (а так как таблица подписана неправильно —
конвертируются тоже неправильно).
Самое близкое, что можно сделать — резервное копирование без конвертации
(mysqldump --default-character-set=cp1251), при этом в резервной копии таблица будет
подписана как cp1251 (т.е. там будет что-то типа CREATE TABLE tablename ... CHARSET cp1251),
если эти подписи исправить на 1256, то потом такая копия должна загрузиться правильно.
Но только арабские строки, остальные, разумеется, испортятся. Кстати, можно
экспортировать только арабские строки (параметр --where mysqldump). Но прокручивание
данных через файлики не избавит, увы, Вас от необходимости отдельно обрабатывать
два языка (latin1 совместим с cp1251, поэтому можно русские и английские строки обрабатывать
одним куском).
Неактивен