Drupal, Denwer, phpMyAdmin и кодировки cp1251, utf8.

Если Вы задумаете обмениваться базами данных между своими Друпал (Drupal) сайтами, например сайтом на Вашем компьютере и сайтом в сети Интернет, то может возникнуть проблема с отображением текста Ваших страничек. Это связано с тем, что Друпал работает с кодировкой utf8, а Денвер работает с кодировкой cp1251.

По незнанию, я устанавливал Друпал по умолчанию, то есть установил Денвер и тут же установил Друпал. У меня работало вроде всё нормально, но потом было замечено что не работает поиск по русским буквам. Поиски по Интернету дали только то, что Друпал нормально работает с utf8.

Потом появились проблемы при использовании импорта/экспорта базы данных. В интернет базы MySQL работают в основном с кодировкой utf8. В другую кодировку текст преобразовывается сервером при передачи текста в браузер. Денвер преобразовывает текст в кодировку cp1251.

При экспорте базы MySQL данные сохраняются в cp1251 и при импорте в другую базу они также идут в кодировке cp1251, но приемная база считает что это utf8 и при выдаче в браузер происходит ещё одна перекодировка, ненужная, и получается непонятно что.

Что бы этого избежать, мною были внесены некоторые изменения в настройки базы MySQL и phpMyAdmin.

Кодовая таблица для базы данных MySQL определяется в файле my.cnf, его можно открыть для редактирования из любого текстового редактора. Только надо сначала открыть редактор, а потом в редакторе открыть этот файл. Если установка Денвера происходила по умолчанию или по рекомендациям, то этот файл будет расположен в Z:\usr\local\mysql4\my.cnf

Делаем замены, устанавливающие кодовую таблицу utf8 вместо cp1251

[client]
port = 3306
socket = /tmp/mysql.sock
# ==============================================================
# === БЫЛО === default-character-set = cp1251
# ==============================================================
default-character-set = utf8
character-sets-dir = /usr/local/mysql4/share/charsets

#
# Параметры MySQL-сервера.
#
[mysqld]
# Использовать режим совместимости с клиентами MySQL 3.x и MySQL 4.0.
old-passwords

# Кодировка баз данных по умолчанию.
default-character-set = utf8 # было cp1251
init-connect = "set names utf8" # было cp1251


Перезапускаем Апач ( Restart server )

На момент написания этого материала у меня установлено:
Базовый пакет: Base_2006-10-04_a1.3.33_p4.4.3_m4.1.16_pma2.6.1.exe
Пакет расширения: PHP4_2006-10-04_4.4.4.exe
Если у Вас установлены другие версии, то возможно отличие, но принцип остаётся - надо ср1251 заменить на utf8 .

Так как в основном для импорта/экспорта используется phpMyAdmin, то нужно и там сделать некоторые изменения. Справа на главной странице http://localhost/Tools/phpmyadmin/index.php выбираем
Language -> Russian (ru-utf-8),
Сопоставление соединения с MySQL -> utf8_general_ci
должно быть: MySQL-кодировка: UTF-8 Unicode (utf8)

В самом низу страницы возможно возникнет сообщение:

Ваш конфигурационный файл содержит настройки (пользователь root без пароля), которые относятся к привилегированному пользователю MySQL (по умолчанию). Ваш MySQL сервер запущен с этими настройками по умолчанию, открытый для вторжений, поэтому Вам настоятельно рекомендуется устранить эту дыру в безопасности.
The mbstring PHP extension was not found and you seem to be using multibyte charset. Without mbstring extension phpMyAdmin is unable to split strings correctly and it may result in unexpected results.

Сообщение на английском говорит о том, что для нормальной работы phpMyAdmin с кодировкой utf8 необходим модуль расширения mbstring для PHP. Данный модуль есть в расширении для PHP для Денвера, Скачиваем это расширение и устанавливаем если Вы его ещё не установили.

Далее ищем файл Z:\usr\local\php\php.ini и в нем убираем ";" в начале строки

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Динамически загружаемые расширения ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Убираем ; перед двумя следующими строками
extension=php_gd2.dll -- графическая библиотека
extension=php_mbstring.dll -- работа с уникодом.

перезапускаем Денвер и проверяем обновлением страницы http://localhost/Tools/phpmyadmin/index.php

Если надпись

The mbstring PHP extension was not found and you seem to be using multibyte charset. Without mbstring extension phpMyAdmin is unable to split strings correctly and it may result in unexpected results.

изчезла, то проблемы решены и всё должно работать нормально. Во всяком случае у меня все работает и поиск и импорт/экспорт.