Начало » Хостинг » Тех. поддержка » MySQL 4.1 и решение проблемы с кодировкой символов
icon4.gif  MySQL 4.1 и решение проблемы с кодировкой символов [сообщение #54] Вск, 11 Декабрь 2005 17:09
long в настоящее время не в онлайне long
Сообщений: 203
Зарегистрирован: Ноябрь 2005
Senior Member
У нас на хостинге установлен MySQL 4.1 Эта версия вышла совсем недавно, что кстати не помешало еще более недавно выйти версии 5.0. Wink Версия 5.0 еще совсем сырая для применения на хостинге, да и с 4.1 у многих хостеров возникли большие проблемы. Проблемы эти связаны с тем, что в этой версии добавили возможность гибко задавать кодировку символов. В результате эта самая кодировка стала перекодироваться не пойми как. Поэтому в большинстве хостингов до сих пор применяется MySQL 4.0.

Сразу успокою – у нас эта проблема решена. Сейчас объясню суть проблемы и ее решение у нас.

Сначала инструкция как надо делать сейчас, чтобы все работало правильно, а ниже описание для тех, кому интересны подробности.

Чтобы с кодировкой все было нормально нужно в php.ini, который лежит в директории conf Вашего сайта, прописать опцию mysql.client_charset (это наша доработка php) с нужной MySQL кодировкой в секции [MySql]. Например, mysql.client_charset = cp1251. После этого php будет при подключении к MySQL автоматически ставить заданную Вами кодировку. Соответственно Вы можете без проблем задавать кодировку на каждый Вас сайт.


Теперь подробности:

В старых версиях MySQL (< 4.1) кодировка всех БД задавалась в одном месте (в конфигурации MySQL на сервере) на все базы данных. Понятно, что для хостинга это не слишком хорошо. Для разных стран и языков нужны разные кодировки, и даже в России в ходу несколько кодировок. А в UTF-8 сайты пока делают редко.

Вот в версии 4.1 и решили, что кодировку нужно задавать индивидуально на каждую БД, а чтобы мало не показалось, и на таблицу, и на столбец. В результате, как нам кажется, они явно перемудрили. Основная проблема в том, что если у программы, работающей с БД (например, php скрипт) установленная для MySQL кодировка не совпадает с кодировкой БД, происходит автоматическое перекодирование. Все вроде бы хорошо. Только вот ВСЕ существующие скрипты кодировку для MySQL 4.1 не устанавливают, и не скоро будут. А отключить перекодирование нельзя. В результате частенько MySQL напару с php начинают чего-то там куда-то перекодировать, а бедный пользователь ничего не может понять.

Правильное и единственно верное решение: в каждом скрипте после соединения с БД нужно выполнить команду set_names ваша_кодировка. Это, кстати, упрощенный способ, на самом деле там задается целых три кодировки. Если скрипт Вы пишете сами, особых проблем нет, но если Вы ставите форум, который сами не писали... не будете же Вы его править?!

Частично проблему можно было бы решить за счет того, что когда MySQL-клиент (например, php) не выставил кодировку – он должен установить кодировку по умолчанию, которая задается на весь сервер. Это срабатывает с perl, но не помогает для php.

Поиск в интернет и просмотр исходников php (включая и версию 5), показал что php не следует рекомендациям MySQL и не использует опции по умолчанию для клиентов. По сути это ошибка в программе, хотя MySQL тоже странно себя ведет. Он мог бы это делать автоматически.

После некоторых раздумий мы исправили в исходниках php эту ошибку, ну и заодно добавили в php.ini опицию mysql.client_charset. Теперь в php можно задать кодировку с помощью опции в php.ini, а в остальных языках (например, perl), Вы можете быть уверены, что по умолчанию кодировка установлена в UTF-8. И все работает правильно, если же Вам нужна другая кодировка, например, в perl скрипте. Тут уж придется добавлять в скрипт явный выбор кодировки.

Как нам видится, теперь проблемы с кодировкой в MySQL + php у нас решены на корню. С другими языками тоже ситуация вполне приемлемая (по крайней мере, не хуже, чем было в 4.0).

Если у Вас все же возникли проблемы, пишите в тех.поддержку, как обычно мы справимся и с ними. Wink

[Обновления: Втр, 23 Январь 2007 19:28]


Сотрудник OpenHosting
Предыдущая тема:Cкорость закачки (где у вас сервера расположены?)
Следующая тема:php GD
Переход к форуму:
  


Текущее время: Птн Сен 3 06:59:44 MSD 2010

Время, затраченное на генерацию страницы: 0,15854 сек.
.:: Обратная связь :: Начало ::.

Powered by: FUDforum 2.7.6.
Copyright ©2001-2006 FUD Forum Bulletin Board Software