bbs

Здравствуйте Гость ( Вход | Регистрация )

 
ОтветитьСоздать новую темуСоздать новое голосование

Каскадный · [ Стандартный ] · Линейный

> Кодировки Mysql, Перевод и отображение из utf8 в cp1251

 $tyluS
post 1.10.2008 - 17:44
Отправлено #1

Unregistered




Сайт http://im-consulting.ru/ корректно отображается в кодировке UTF8. Но прикручивая скрипты, к примеру ленты новостей в правом блоке, он не отображает верно ява скрипт, считая его в иной кодировке из файла в win 1251. Задача перегнать всю базу движка ModX из UTF8 в cp1251.

phpMyAdmin - 2.11.9.1
Версия MySQL-клиента: 4.1.22

Опишу как я делал через PhpMyadmin
1. Создаем дамп баз данных через экпорт, сохраняем.
2. Удаляем все таблицы из этой базы на сервере через phpMyAdmin.
3. Открываем сохраненый дамп через Notepad++ в кодировке UTF8 и меняем везде CHARSET=utf8 на CHARSET=cp1251. и тут 2 варианта, какой из них лучше?
3.1. Конвертим формат файла UTF8 в Ansi и заливаем обратно через Import выставляя кодировку файла cp1251
Присоединённое изображение
P.s. обязательно ли ставить совместимость с Ansi, ведь конвертили в этот именно формат?
3.2. Без конверта сразу делаем импорт дампа выставляя кодировку файла UTF8
далее пошли по варианту 3.2.
4. Меняем в настройках движка ModX кодировку на cp1251, для пересборки и сброса кеша базы. После этого открываем сайт - видим ужас Присоединённое изображение
на движке происходит еще хуже Присоединённое изображение
(также как и если вручную на странице IE сменить кодировку)
5. Открываем PhpMyadmin.
Смотрим в кодироке UTF8 таблицу и поле где сожержится контент для страниц
Присоединённое изображение и затем меняем на кодировку 1251, такая же примерно чушь.
Вывод, база не поняла и не правилно приняла мой файл кодировок?

Если же вернуться к пункту 3 и пойти по варианту 3.1 то сайт отобржается норм в кодировке UTF8, а в базе данных через PhpMyadmin таблица c конентом и полем отображается верно лишь в кодировке UTF8.
Смена в движке кодировки на cp1251 приводим опять к кракозябрам.
Вывод - база приняала файл с кодировкой кирилицы нормально, но в скрипты движка поступаем почему то в UTF8
Поразмыслив мозгами, сделал вывод предположительный (из перепески с тех подержкой хостинга)

Цитата
Как изменить кодировку стоящую по умолчанию через Phpmydmin, пытался сделать запрос SQl, а конкретно в базе imcons_mod посылая запросы
SET character_set_client = cp1251
SET character_set_results = cp1251
SET character_set_connection =cp1251
но ничего не меняется

на запрос SHOW VARIABLES LIKE 'char%' выходит

character_set_client utf8
character_set_connection cp1251
character_set_database cp1251
character_set_filesystem binary
character_set_results utf8
character_set_server cp1251
character_set_system utf8

Т.е. как я понял чтобы все было ОК надо первести character_set_client и character_set_results в кодировку cp1251.
Дамп баз данных переделал в нужную кодировку и перезалил очистив данную БД, движок тоже настроен на cp1251.

Евгений Фотон
то что прописано в phpmyadmin неважно, важно только в какой кодировке выводит данные скрипт из базы.

bomer
По теории так. В данн момент сделано все верно и отображение полей в Phpmyadmin стало верным.
Но как я читал кодировка клиента и соединения должны совпадать
character_set_client utf8 и character_set_connection cp1251
разного набора, это может влиять? Если да, как можно перевести клиент кодировку, способом описанном выше SET character_set_client = cp1251 не изменяется.
Или вообще в чем может быть дело? На движок передается все в виде UTF8 и в этом должна быть причина.

Евгений Фотон
Перекодировал базу в cp1251

bomer
Извините, но вы не допонимаете вопрос. То что Вы сделали, я делал не 1 раз.
Наберите в IE любой версии http://im-consulting.ru/ и увидите иероглифы. Лента новостей верна т.к. кодировка в мета теге стоит cp1251. А в базе все хранится в какой то неправильной кодироке cp1251.
В статье http://www.phpfaq.ru/charset <"откуда берутся "вопросики"? Они появляются, если кодировка таблицы не совпадает c кодировкой клиента.">
set character_set_client
set character_set_results - у нас в базе они оба настроены как кодировка UTF8. и не меняется. Ну не проходит кодировка к клиенту в cp1251, все идет в UTF8. Что сделать, чтобы добиться результата (без иероголифов)? На 2ом сайте эффект такой же.

Евгений Фотон
нет, в данный момент база хранится и отдается в cp1251, а в utf8 её пребразовывает уже сам скрипт не ясно зачем.

bomer
посмотрите пожалуйста в базе imcons_mod таблицу 'modx_site_content' и значения поля 'content'.
К примеру если посмотреть через PhpMyadmin в кодироке UTF8 через IE - иероглифы. В cp1251 меняю - тоже.

Евгений Фотон
В phpmyadmin у меня всё по русски. в том числе и в modx_site_content


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

Копнув еще одну версию, что первоначально соединения движка с базой осуществлялось через кодировку UTF8. Нашел запрос к БД в файле визуального менеджера сайта
Код
   mysql_select_db($dbase);
   mysql_query("SET NAMES 'cp1251';",$modxDBConn);
   mysql_query("SET CHARACTER SET 'cp1251';",$modxDBConn);
   mysql_query("SET SESSION collation_connection = 'cp1251_general_ci';",$modxDBConn);

тут уже заменил все кодировки на нужные. И пока писал этот длинный топик, нашел еще один файл с коннектом к базе данных, который отвечает за соединения уже непосредственно от сайта. Вот как раз этот файл и отвечал за не правильный вывод из БД в нужной кодировке на сайт.Заменил на эти 3 строчки и вуаля теперь все работает. biggrin.gif радости нет предела.
P.s. Не стал стирать топик т.к. много материала накопилось по БД и кодировке, решил просвятить кому интересно. Сейчас остается лишь не большая проблека с внутренним интерфейсом, там приходится переключаться вручную на UTF8 иначе опять эти кракозябры. Но это уже мелочи, подправим...
Вернуться к началу страницы
+Цитировать сообщение
 jaw
post 1.10.2008 - 19:23
Отправлено #2


Group Icon
Сообщений: 421
Рег.: 20.04.05
ID No.: 2 283
Цитата ($tyluS @ 1.10.2008 - 17:44)
Сайт http://im-consulting.ru/ корректно отображается в кодировке UTF8. Но прикручивая скрипты, к примеру ленты новостей в правом блоке, он не отображает верно ява скрипт, считая его в иной кодировке из файла в win 1251. Задача перегнать всю базу движка ModX из UTF8 в cp1251.

phpMyAdmin - 2.11.9.1
Версия MySQL-клиента: 4.1.22

Опишу как я делал через PhpMyadmin
1. Создаем дамп баз данных через экпорт, сохраняем.
2. Удаляем все таблицы из этой базы на сервере через phpMyAdmin.
3. Открываем сохраненый дамп через Notepad++ в кодировке UTF8 и меняем везде CHARSET=utf8 на CHARSET=cp1251. и тут 2 варианта, какой из них лучше?
3.1. Конвертим формат файла UTF8 в Ansi и заливаем обратно через Import выставляя кодировку файла cp1251
Присоединённое изображение
P.s. обязательно ли ставить совместимость с Ansi, ведь конвертили в этот именно формат?
3.2.  Без конверта сразу делаем импорт дампа выставляя кодировку файла UTF8
далее пошли по варианту 3.2.
4. Меняем в настройках движка ModX кодировку на cp1251, для пересборки и сброса кеша базы. После этого открываем сайт - видим ужас Присоединённое изображение
на движке происходит еще хуже Присоединённое изображение
(также как и если вручную на странице IE сменить кодировку)
5. Открываем PhpMyadmin.
Смотрим в кодироке UTF8 таблицу и поле где сожержится контент для страниц
Присоединённое изображение и затем меняем на кодировку 1251, такая же примерно чушь.
Вывод, база не поняла и не правилно приняла мой файл кодировок?

Если же вернуться к пункту 3 и пойти по варианту 3.1 то сайт отобржается норм в кодировке UTF8, а в базе данных через PhpMyadmin  таблица c конентом и полем отображается верно лишь в кодировке UTF8.
Смена в движке кодировки на cp1251 приводим опять к кракозябрам.
Вывод - база приняала файл с кодировкой кирилицы нормально, но в скрипты движка поступаем почему то в UTF8
Поразмыслив мозгами, сделал вывод предположительный (из перепески с тех подержкой хостинга)
По последнему сообщения, когда тех поддержка проверяла базу данных из PhpMyadmin у меня было все в некорректной кодировке. А как у них отображалось нормально - хз.

Копнув еще одну версию, что первоначально соединения движка с базой осуществлялось через кодировку UTF8. Нашел запрос к БД в файле визуального менеджера сайта
Код
   mysql_select_db($dbase);
   mysql_query("SET NAMES 'cp1251';",$modxDBConn);
   mysql_query("SET CHARACTER SET 'cp1251';",$modxDBConn);
   mysql_query("SET SESSION collation_connection = 'cp1251_general_ci';",$modxDBConn);

тут уже заменил все кодировки на нужные. И пока писал этот длинный топик, нашел еще один файл с коннектом к базе данных, который отвечает за соединения уже непосредственно от сайта. Вот как раз этот файл и отвечал за не правильный вывод из БД в нужной кодировке на сайт.Заменил на эти 3 строчки и вуаля теперь все работает. biggrin.gif радости нет предела.
P.s. Не стал стирать топик т.к. много материала накопилось по БД и кодировке, решил просвятить кому интересно. Сейчас остается лишь не большая проблека с внутренним интерфейсом, там приходится переключаться вручную на UTF8 иначе опять эти кракозябры. Но это уже мелочи, подправим...
*


вообще то 2 строчек должно хватать типа:
@mysql_query("SET CHARACTER SET UTF8");
@mysql_query("SET NAMES UTF8");




Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
 $tyluS
post 1.10.2008 - 19:37
Отправлено #3

Unregistered




По правилам как опция можно указывать и collation, если она не указана, выбирается по дефолту, а в группе cp1251 дефолт cp1251_general_ci
Вернуться к началу страницы
+Цитировать сообщение

ОтветитьОпции темыСоздать новую тему
2 чел. читают эту тему (2 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
 

 rss   Упрощённая версия Сейчас: 24.07.2019 - 05:07