Проблема возникает, если вы работаете с кодировкой, отличной от UTF-8, и храните в базе данных тексты, к примеру, в кодировке cp1251. Но MySql не всегда использует по умолчанию кодировку cp1251, в частности, не всегда по умолчанию используется эта кодировка для соединений с базой. Из-за этого возникают ситуации, когда в базе тексты хранятся в нормальном читабельном виде, но при выводе этих данных на сайт появляются одни лишь «кракозяблы» (знаки вопросов вместо букв – «?????????? ????»).
Для борьбы с этим явлением нужно использовать следующий ряд запросов, которые должны выполняться после каждого коннекта к базе:
mysql_query("SET NAMES 'cp1251'"); mysql_query("SET CHARACTER SET 'cp1251'");
Обновлено: Количество запросов уменьшено благодаря прояснению ситуации Бирц`ом (см. комментарии).
Это обычно помогает. Единственное неудобство, что каждый раз будут выполняться эти избыточные, по сути, запросы (как не крути, а это дополнительные нагрузки на сервер, хотя предполагаю, что достаточно мизерные). Еще бывают ситуации, когда нет возможности прописать эти строки после каждого коннекта, если вы, к примеру, используете какую-то программу, работающую напрямую с базой данных и не имеющую соответствующих настроек в себе.
На серверах, которые предоставляют услуги хостинга для русскоязычных сайтов, чаще всего все в порядке и такой проблемы нет (т.к. у них по умолчанию MySql настроен на работу в первую очередь с кодировкой cp1251). Если ваш сайт использует иностранный хостинг, то, скорее всего, единственным способом решения проблемы будет способ, описанный выше.
Но если же вы имеете возможность подкорректировать конфиг MySql на сервере, тогда есть еще одно решение, реализацию которого я с радостью для себя обнаружил (я-то «догадывался», что можно как-то изменить настройки самого MySql, но как это сделать, не знал) 🙂
MySQL и русская кодировка WINDOWS-1251
Сегодня мы рассмотрим, что нужно написать в конфигурационном файле /etc/my.cnf для того, чтобы настроить mysql стандартной сборки на работу с кодировкой cp1251 по умолчанию без всякой перекомпиляции.
Рассмотрим пример конфига на основе MySQL 5.x.
В раздел [mysqld] необходимо добавить следующее:
default-character-set=cp1251
character-set-server=cp1251
collation-server=cp1251_general_ci
init-connect=»SET NAMES cp1251″
skip-character-set-client-handshakeДве последние строки принудительно устанавливают кодировку cp1251 для всех запросов.
В раздел [mysqldump] достаточно добавить только
default-character-set=cp1251
Этого достаточно, чтобы MySQL работал с windows-1251 кодировкой по умолчанию.
(с) dodik.ru
Теперь я могу использовать свой локальный сервер на XAMPP (ну не нравится мне Денвер…) более комфортно 🙂 Также это прекрасно сработало на «самодельном» сервере под SUSE.