1

Тема: Просьба помочь с кодировкой

по этому адресу http://tattoo-barnaul.ru/photogallery/ можно посмотреть как некорректно отображается текст...
подскажите как настроить...
какие данные нужны (номер версии и т.д.) спрашивайте... выложу...
форум перечитал ничего не выходит...

2

Re: Просьба помочь с кодировкой

bost84
Посмотрите как данные отображаются в phpMyAdmin.
Если в нем кирилица выводится корректно, то сделайте дамп структуры таблицы (без данных), которая содержит кирилицу и покажите ее. Там должны быть указаны параметры кодировок.

Также покажите вывод запроса:

SELECT VARIABLES LIKE 'char%';

3

Re: Просьба помочь с кодировкой

Ситуация такая вообще:
база перенесена из этой базы

Версия сервера: 5.0.45-community
phpMyAdmin - 2.11.4
Версия MySQL-клиента: 4.1.22
MySQL-кодировка: UTF-8 Unicode (utf8)
Сопоставление соединения с MySQL:utf8_unicode_ci

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

в эту

Версия сервера: 5.0.51a
phpMyAdmin - 2.11.6
Версия MySQL-клиента: 5.0.51a
MySQL-кодировка: UTF-8 Unicode (utf8)
Сопоставление соединения с MySQL:utf8_unicode_ci

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

текст в базе выводиться Фото татуировок так...
осталась исходная база... может нужно её как-нибудь правильно перенести...

сравнение в таблицах cp1251_general_ci в обоих базах...

4

Re: Просьба помочь с кодировкой

bost84
Сайт в utf8, данные в БД тоже, а таблицы в cp1251 - это и есть ошибка.
По возможности, создайте новый дамп на старом сервере, откройте его в текстовом редакторе (например Notepad++) и посмотрите отображается ли там кирилица и находится ли файл в кодировке utf8, или ANSI (должен быть в utf8). Если кирилица отображается, то обычной заменой сделайте замещение cp1251 на utf8 во всех запросах на создание таблиц. Например: cp1251_general_ci замените на utf8_general_ci, и т.д. Также обязательно создайте БД, в которой будут храниться таблицы скрипта, в сопоставлении utf8_general_ci. После внесения изменений в дамп, импортируйте его выбрав кодировку файла utf8.

5 (изменено: bost84, 2008-06-24 17:11:54)

Re: Просьба помочь с кодировкой

Hanut сказал:

bost84
Сайт в utf8, данные в БД тоже, а таблицы в cp1251 - это и есть ошибка.
По возможности, создайте новый дамп на старом сервере, откройте его в текстовом редакторе (например Notepad++) и посмотрите отображается ли там кирилица и находится ли файл в кодировке utf8, или ANSI (должен быть в utf8). Если кирилица отображается, то обычной заменой сделайте замещение cp1251 на utf8 во всех запросах на создание таблиц. Например: cp1251_general_ci замените на utf8_general_ci, и т.д. Также обязательно создайте БД, в которой будут храниться таблицы скрипта, в сопоставлении utf8_general_ci. После внесения изменений в дамп, импортируйте его выбрав кодировку файла utf8.

Всё сделал как вы сказали...
результат смотрим по той же ссылке
теперь  ???????? ?????...
но зато в таблицах в phpmyadmin всё по русски...
что теперь ещё нужно сделать?


P.S.

вот что стало

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

6

Re: Просьба помочь с кодировкой

bost84
В phpMyAdmin выберите БД, перейдите во вкладку "Операции" и посмотрите какое там указано сравнение (внизу).

Если там стоит utf8_general_ci, то покажите вывод запроса:

SHOW GLOBAL VARIABLES LIKE 'char%';

7

Re: Просьба помочь с кодировкой

именно такая кодировка там и стояла
вывод данного запроса смотрим чуть выше
сейчас поменял... поставил так же как и в прошлой базе... 1 к 1 все сравнения и всё прочее... теперь опять не ?????? а кракозябры...
причём в phpmyadmin кракозябры одинаковые как в прошлой базе так и в новой...
теоретически всё должно работать... но не работает... уже перепробовал много описанных способов ничего не получается...

8

Re: Просьба помочь с кодировкой

Покажите вывод запроса (это другой запрос).

SHOW GLOBAL VARIABLES LIKE 'char%';

9

Re: Просьба помочь с кодировкой

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

10

Re: Просьба помочь с кодировкой

Кодировка соединения latin1, поэтому данные вопросиками отображаются, так как в БД они в utf8.
Если есть доступ к конфигурационному файлу MySQL (my.ini) и предпологается, что все скрипты при соединении будут работать в кодировке utf8, то в раздел [mysqld] файла my.ini можно добавить строки:

init-connect="SET NAMES utf8"
default-character-set=utf8

В противном случае следует найти в файлах скрипта тот в котором вызывается функция mysql_connect и сразу после нее добавить строку:

mysql_query('SET NAMES utf8');

11

Re: Просьба помочь с кодировкой

к огромнейшему сожалению не помогло... прописывал в файле... только другие базы стали кракозябры отображать.... вернул назад...
ещё комментарий сама база, таблицы и сопоставление бд cp1251_general_ci
на старом хостинге с такими же настройками всё работало...
я уже не знаю что делать...
может посоветуете как мне её заново перенести? чтобы наверняка получилось...

12

Re: Просьба помочь с кодировкой

bost84
Не понял что и куда вы прописывали и почему у вас БД в cp1251, когда ранее указали utf8.

Необходимо импортировать данные в БД с кодировкой utf8, чтобы таблицы тоже были в utf8 и данные в кирилице корректно отображались в phpMyAdmin. После того как это сделаете, выполните то что я описал выше по поиску функции mysql_connect.

13

Re: Просьба помочь с кодировкой

Свершилось ЧУДО!!!
у меня всё получилось...
попытаюсь ниже подробно описать что к чему...
вобщем статейка как правильно переносить базу чтобы кодировка отображалась правильно после переноса:

Задача: перенести базу с одного хостинга на другой...

Решение задачи:

Есть у нас исходная база, назовём её А и будет вторая в которую мы будем переносить, назовём её Б.
Не спишите создавать базу Б, потому как нам сначала нужно выяснить в сопоставлении какой кодировки её создавать.

1. что нам нужно выяснить для начала так это имеется ли у нас доступ к файлу /etc/my.cnf (обычно на выделенных серверах при наличии root доступа) и нет ли у нас уже созданных баз на новом хостинге работающих нормально (мой случай).

вообщем сначала опишу мою ситуацию у меня есть доступ к my.cnf но это ничего не меняет если есть другие рабочие базы на новом хостинге.
редактировать его не имеет смысла потому как это повлияет на работоспособность уже созданных баз. соответственно этот случайй подходит также и для тех у кого нет доступа к этому файлу (если нет доступа к файлу то вам без разницы есть на новом хостинге уже созданные рабочие базы или нет потому как на них повлиять изменением файла вы не сможете).

итак мы выяснили вышеописанное...

2. в старой и будущей делаем запрос

SHOW GLOBAL VARIABLES LIKE 'char%';

например у меня получилось так
база А:

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/

база Б:

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

видим разницу в базе А - cp1251 в базе Б - latin1
в данном случае есть 2 выхода либо изменить на сервере файлик чтобы база Б тоже была cp1251 либо импортировать базу так чтобы она была latin1
в противном случае если мы её импортируем как cp1251 будут кракозябры...

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

прописываем в файле etc/my.cnf

[mysqld] 

init-connect="SET NAMES cp1251"
default-character-set=cp1251

перегружаем сервер...

смотрим запрос ещё раз
должно быть так

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/local/share/mysql/charsets/

при таком случае просто экспортируем из старой базы и импортируем в новую... всё должно работать...
есть единственное НО нужно открыть файл который будете импортировать любым текстовым редактором (например akelpad. в этом редакторе хорошо можно узнать кодировку)  и посмотреть в какой кадировке файл, в такой и импортировать его (указывать такую при импорте файла).
у меня она оказалась utf8.
как правильно узнать кодировку файла спросите вы...
я при открытии  файла увидел в нём кракозябры... значит не она... начал перебирать сразу ткнул на utf8 и вместо непонятных символов я увидел русские буквы... значит она... utf8
итог
не смотря на то что все таблицы базы находятся в cp1251 импортируем мы файл в utf8... будьте внимательны!

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

мы выяснили что в старой базе все таблицы в cp1251 а новой нужно latin1

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

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

ну вот вроде и всё... незнаю насколько понятно написал... у кого получится сделать по моей технологии отпишитесь...

14

Re: Просьба помочь с кодировкой

bost84
Большое спасибо за столь подробное описание. Очень надеюсь, что оно сможет многим помочь.

С третьим пунктом не согласен в корне, так как при сохранении данных в cp1251 в таблицах latin1, сортировка и поиск средствами MySQL будет некорректен.
Как уже говорил выше, решением является внесение изменений в скрипт. Причем данное решение будет работать во всех случаях. Также оно является единственно возможным при наличии данных в нескольких кодировках, например, cp1251 и utf8.