1 (изменено: Ruskat, 2012-06-20 11:21:16)

Тема: Перекодировать базу с каракулями в базу с понятным текстом

Всем привет! Установили на хостинг IPB в кодировке ср-1251.
А ему нужна UTF-8.  Ну вот и пошли каракули в базе...
Переставлять с нуля - убыточно, так как уже форум заполняется...
Проблема еще и тем начала проявляться, что большая "И" отображается как " ?".
Как перекодировать существующую базу. Точнее хотя бы скачанную таблицу, чтобы потом ее поставить назад?

2

Re: Перекодировать базу с каракулями в базу с понятным текстом

Покажите в каком виде отображается кириллица в phpMyAdmin, какая кодировка таблиц и что выводит запрос:

SHOW GLOBAL VARIABLES LIKE "char%";

3 (изменено: Ruskat, 2012-06-20 12:05:28)

Re: Перекодировать базу с каракулями в базу с понятным текстом

Там смесь кодировок. Кодировка сервера - UTF-8, БД- Изначальная ср-1251.
Variable_name     Value
character_set_client    cp1251
character_set_connection    cp1251
character_set_database    cp1251
character_set_filesystem    binary
character_set_results    cp1251
character_set_server    cp1251
character_set_system    utf8
character_sets_dir    /usr/share/mysql/charsets/

4

Re: Перекодировать базу с каракулями в базу с понятным текстом

Хорошо, а как кириллица выглядит в phpMyAdmin?

5 (изменено: Ruskat, 2012-06-20 14:07:33)

Re: Перекодировать базу с каракулями в базу с понятным текстом

вот так...
http://s019.radikal.ru/i618/1206/86/895ec9fd34edt.jpg

6

Re: Перекодировать базу с каракулями в базу с понятным текстом

Ясно. Корректно перекодировать такие крякозябы можно только с доступом к консоли сервера. Необходимо создать дамп такой командой.

mysqldump --user=root --password=pass --default-character-set=cp1251 db_name > dump.sql

root - Это пользователь MySQL, pass - его пароль.
Ключ --default-character-set=cp1251 позволяет сохранить верную кодировку.
db_name - Имя базы данных.
Если в базе данных таблицы с разными кодировками, то сохранять их надо отдельно, для чего необходимо их перечислить после имени базы данных.

После создания дампа потребуется его открыть в текстовом редакторе (рекомендую Notepad++) и отредактировать в структурах таблиц кодировку поменяв ее с cp1251 на utf8 (в сравнениях полей тоже).

Отредактированный дамп можно импортировать в phpMyAdmin выбрав кодировку файла windows-1251.

Если на хостинге нет доступа к консоли, то потребуется перенести данные на локальный сервер (домашний компьютер) и уже на нем провести все вышеперечисленные работы. Но в этом случае велика вероятность, что данные будут восстановлены не полностью, как правило получаются битые символы, вроде искаженных букв И и Ш.

7

Re: Перекодировать базу с каракулями в базу с понятным текстом

поддержка ничем не помогла...
но как же исправить отображение И?  а то �? не в тему. исправляю на И, а оно всёравно

8

Re: Перекодировать базу с каракулями в базу с понятным текстом

Ruskat сказал:

но как же исправить отображение И?

Исправлять кодировку, других вариантов я не знаю.

9

Re: Перекодировать базу с каракулями в базу с понятным текстом

Интересная вещь обнаружилась...  При попытке найти маленькую "и" в словах локализации форума из админки всё норм ищет. А если найти просто "И", то форум выдаёт: 
"There appears to be an error with the database.

If you are seeing this page, it means there was a problem communicating with our database. Sometimes this error is temporary and will go away when you refresh the page. Sometimes the error will need to be fixed by an administrator before the site will become accessible again."
или
"Там, как представляется Ошибка с базой данных.

  Если вы видите эту страницу, это означает, что существует проблема общения с нашей базой данных. Иногда эта ошибка является временной и исчезнет, когда вы обновите страницу. Иногда ошибки должны быть исправлены администратором, прежде чем сайт станет доступным еще раз.".
А как задать кодировку общения в конфиг-файле с БД?
Вот пример конфига:

$INFO['sql_driver']            =    '';
$INFO['sql_host']            =    '';
$INFO['sql_database']            =    '';
$INFO['sql_user']            =    '';
$INFO['sql_pass']            =    '';
$INFO['sql_tbl_prefix']            =    '';
$INFO['sql_debug']            =    '1';
$INFO['board_start']            =    '';
$INFO['installed']            =    '1';
$INFO['php_ext']            =    'php';
$INFO['safe_mode']            =    '0';
$INFO['base_url']            =    '';
$INFO['banned_group']            =    '5';
$INFO['admin_group']            =    '4';
$INFO['guest_group']            =    '2';
$INFO['member_group']            =    '3';
$INFO['auth_group']            =    '1';
$INFO['mysql_tbl_type']            =    '';

10

Re: Перекодировать базу с каракулями в базу с понятным текстом

Кажется эта строка отвечает за кодировку соединения с MySQL.

$INFO['mysql_codepage'] = 'utf8';

Но это не поможет без перекодировки данных.

11

Re: Перекодировать базу с каракулями в базу с понятным текстом

База кодирована в УТФ. точнее файл SQL.  А кодировка  базы и таблицы utf-8_general_ci.
Парметр $INFO['mysql_codepage'] = 'utf8'; не помог "И" не могу вставить.

12

Re: Перекодировать базу с каракулями в базу с понятным текстом

Ruskat сказал:

База кодирована в УТФ. точнее файл SQL.

Я не понял. Каким образом? Вы перекодировали данные БД и теперь в phpMyAdmin кириллица вместо крякозябов читаема?

13

Re: Перекодировать базу с каракулями в базу с понятным текстом

нет...  она так и не читаема...  это специфика хостинга, видимо. за то в пограмме SQL Manager for MySQL вся кириллица нормальна.
http://s49.radikal.ru/i123/1206/6b/3af772c58b92t.jpg
Решил для теста поставить на отдельную базу отдельный форум. Базу задал в кодировке ср1251..  Да, конечно "каракули" ими так и остались, но исчезла одна проблема... буква "И" отображается нормально. А в рабочем варинте с "И" проблемы, зотя кодировку выставил таковой, как и там.
http://s019.radikal.ru/i624/1206/19/40c2f4f13f47.png
При поиске слов на "И" в языке вываливается ошибка БД.
"There appears to be an error with the database.
If you are seeing this page, it means there was a problem communicating with our database. Sometimes this error is temporary and will go away when you refresh the page. Sometimes the error will need to be fixed by an administrator before the site will become accessible again.". Не подскажете, как хоть это исправить? Может можно как-то перекодировать И в И и обратно, чтобы небыло с ней проблем при поиске и отображении?

14

Re: Перекодировать базу с каракулями в базу с понятным текстом

Ruskat сказал:

это специфика хостинга

К сожалению, это неверная настройка форума при его установке.

Ruskat сказал:

А в рабочем варинте с "И" проблемы, зотя кодировку выставил таковой, как и там

Каким образом была выставлена кодировка? Если вы просто поменяли сравнение таблиц, то это и вызвало битый символ. Кодировку таблиц менять в phpMyAdmin нельзя, необходима перекодировка данных перед этим.

Ruskat сказал:

Может можно как-то перекодировать И в И и обратно, чтобы небыло с ней проблем при поиске и отображении?

Сожалею, но как справиться с битым символом - я не знаю.

15

Re: Перекодировать базу с каракулями в базу с понятным текстом

Вот именно на простом изменении сопоставления видно и сглупил...
Говорите, необходима перекодировка данных?  Я вот думаю, чтобы не кодировать всю базу, то хочу перекодировать таблицу bbcore_sys_lang_words. Как это будет правильнее пошагово сделать?
Я думаю через SQL manager... там тоже можно извлекать "потаблично".

16

Re: Перекодировать базу с каракулями в базу с понятным текстом

Выше я описал как это делать через консоль. Как перекодировать через SQL manager, и возможно ли это - сказать не могу. Можете выслать дамп на hanut@php-myadmin.ru попробую перекодировать и покажу что получится. Но битый символ вернуть уже не выйдет, его придется вручную править в дампе.

17

Re: Перекодировать базу с каракулями в базу с понятным текстом

Варианты для скачивания таблицы или базы...
http://s017.radikal.ru/i435/1206/b2/8ef249f40173.png

18 (изменено: Ruskat, 2012-06-21 17:05:08)

Re: Перекодировать базу с каракулями в базу с понятным текстом

Решил проблему. Благодарю за помощь, Hanut, но твой УТФ-ный вариант я так и не использовал, потому как  при перекешировании языков выбивало ошибку сервера, даже учитывая параметры $INFO['mysql_codepage'] = 'utf8'; и PHP_VALUE default_charset utf-8.
В ход пошел вчерашний резервный "каракульный вариант.
http://s16.radikal.ru/i190/1206/36/f290db5e3bb9.png
На рисунке выше и затаились мои "И" проблемы.  Таблишу перекодировал обратно в виндовс, а подтаблицы забыл...

19

Re: Перекодировать базу с каракулями в базу с понятным текстом

Ruskat сказал:

В ход пошел вчерашний резервный "каракульный вариант.

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