1 (изменено: just123i, 2009-07-02 15:51:15)

Тема: Отображение кодировки, дамп.

Здравствуйте, вот уже неделю мучаюсь со следующей проблемой:

Пытаюсь перенести форум на новый хостинг, но возникли следующий трудности, которые не дают покоя уже длительное время.

Когда смотрю на базу с помощью phpmyadmin, на хостинге с которого переношу, вместо русских букв вижу ???µ???µ?????°?? ?, но в браузере всё отображается хорошо. База, таблицы, ОС, всё полностью в  utf-8.

Проблема заключается при переносе дампа на новый хостинг.

1) Когда делаю дамп с помощью phpmyadmin и открываю его с помощью редактора(notepad++ и т.д.) там отображаются непонятные иероглифы.
При импорте этого дампа в новую БД, на сайт одни знаки вопроса.

SHOW VARIABLES LIKE 'character%' выдаёт следующее:

character_set_client    utf8
character_set_connection    utf8
character_set_database    utf8
character_set_filesystem    binary
character_set_results    utf8
character_set_server    cp1251
character_set_system    utf8
character_sets_dir    /usr/share/mysql/charsets/


Подскажите пожалуйста, что делать в данной ситуации?


UPDATE
Методом тыка, а именно:

SET NAMES latin1;
SELECT * FROM `forum`;

Было установлено, что видимо таблицы на первоначальном хостинге были в lantin1.
Т.е. когда делаю

SET NAMES latin1;
SELECT * FROM `forum`;

Всё нормально выводится, как перекодировать в базе в utf-8 ?


UPDATE
Путём экспериментов, выяснилось, что если открыть перекодированный с помощь Sypex Dumper`a дамп, в стандартном viewer`e(F3) тотал коммандера и выбрать там кодировку UTF-8, то русский текст отображается нормально. Если затем этот дамп залить запросом в базу, в базе нормально всё отображается, но выводит всё равно одни вопросы.


UPDATE
Форум почему-то новые данные записывает в CP1251 о_О

2

Re: Отображение кодировки, дамп.

just123i
SHOW GLOBAL VARIABLES LIKE 'character%'; - выведет вам latin1.

Хорошо, что вы смогли перекодировать дамп, так как это было самое сложное в данном случае. На всякий случай, внимательно проверьте не потерялись ли какие-нибудь буквы при такой перекодировке.

Теперь следует установить кодировку соединения с MySQL в utf8 c теперешнего latin1. Способа два, и зависят они от доступности конфигурационного файла MySQL (my.ini/my.cnf).

1) Если конфигурационный файл MySQL доступен, то следует добавить в раздел [mysqld] строку:

init-connect="SET NAMES utf8"

Также следует отредактировать данную директиву:

default-character-set=utf8

2) Если конфигурационный файл MySQL не доступен, следует редактировать php скрипты. Необходимо найти все вхождения функции mysql_connect, и сразу после нее добавить строку:

mysql_query('SET NAMES utf8');

3 (изменено: just123i, 2009-07-02 16:29:59)

Re: Отображение кодировки, дамп.

Хорошо, что вы смогли перекодировать дамп, так как это было самое сложное в данном случае. На всякий случай, внимательно проверьте не потерялись ли какие-нибудь буквы при такой перекодировке.

Вроде всё ок, конвертировал с помощью Sypex Dumper, затем с помощью notepad++ перекодировал уже в utf8.

SHOW GLOBAL VARIABLES LIKE 'character%'; - выведет вам latin1.

На новом хостинге, этот запрос выдал следующее:
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/

И действительно, данные в базе нормально отображаются, но клиенту отдаётся windows-1251 и что странно, нормально всё отображается.
А если принудительно указывать кодировку в браузере utf-8, то знаки вопроса...

Доступа к настройкам mysql нет, к сожалению, а второй способ немогу  использовать, потому-что не достаточно прав. о_О
Буду пытаться.

Спасибо.

UPDATE
На всякий случай решил проверить, всё ли верно сделал, данный запрос выводит всё правильно:
SET NAMES utf8;
SELECT * FROM `post`;

И я уже совсем тогда непонимаю, почему клиенту отправляется cp1251 о_О

4

Re: Отображение кодировки, дамп.

just123i
Нормально отображаться на страницах в windows-1251 будет только в случае если таблицы имеют кодировку cp1251. Посмотрите кодировку таблиц с помощью phpMyAdmin. Также стоит посмотреть кодировку БД.

Про права я не понял, но без доступа к скриптам решить проблему кодировок не удастся.

5 (изменено: just123i, 2009-07-02 22:14:37)

Re: Отображение кодировки, дамп.

Нормально отображаться на страницах в windows-1251 будет только в случае если таблицы имеют кодировку cp1251. Посмотрите кодировку таблиц с помощью phpMyAdmin. Также стоит посмотреть кодировку БД.

Вот и я удивляюсь smile

Прилагаю скриншот и нужные данные:

http://upload.akusherstvo.ru/images/191702.png


SHOW GLOBAL VARIABLES LIKE 'character%';
_____________________________________________
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/



SHOW VARIABLES LIKE 'character%'
________________________________
character_set_client    utf8
character_set_connection    utf8
character_set_database    utf8
character_set_filesystem    binary
character_set_results    utf8
character_set_server    cp1251
character_set_system    utf8
character_sets_dir    /usr/share/mysql/charsets/



Переменные

http://upload.akusherstvo.ru/images/191703.png

В .htaccess прописана строчка: AddDefaultCharSet utf8

И странички отдаются в utf-8:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

6

Re: Отображение кодировки, дамп.

just123i
В таком случае если в phpMyAdmin кириллица отображается нормально, то как она выглядит на сайте?

7

Re: Отображение кодировки, дамп.

Hanut, на сайте одни вопросы, но если принудительно указать в браузере кодировку цп1251, то отображается нормально. о_О

8 (изменено: just123i, 2009-07-03 02:14:19)

Re: Отображение кодировки, дамп.

Всё, большое спасибо, проблема решилась намного проще:

1) Использовав Sypex Dumper, я сделал бекап, предварительно указав, что данные в базе в latin1 и что требуется сконвертировать их в utf8.
2) Затем с помощью него же, я востоновил бекап (он автоматически подобрал кодировку).

Всё, проблемы нет.))

Еще раз спасибо.

P.S. Правда из-за хостинга решил всё же отказаться от UTF-8, временно, пока не перееду на другой))