Началось все внезапно. Беды не предвещало ничего… Принесли мне дамп БД с просьбой залить все это счастье в базу. Создал я базу через PHPMyAdmin, импортировал дамп в свежее созданную базу, проверил что и как записалось, возрадовался и успокоился… Звонит мне клиент, чей дамп был, и говорит - погляди-ка что показывает на страничке (оговорюсь - дамп был от борды IPB- Invision Power Board, форум короче)… Смотрю - действительно неважно: везде где кириллица вместо текста вопросительные знаки (?????????? ?? ?? ????? ??? ???? e t.c.). С PHPMyAdmin смотрю-все в порядке, а вот борда… Вот тут и началось…
Стал я бороться с кодировкой… Скажу сразу - совокуплялся я с конфигами трое суток кряду (с небольшим перерывом на сон). Врагу бы не пожелал.
Не стану описывать мое эмоциональное и психическое состояние на тот момент, перейдем к решению данной проблемы…
Во первых, просмотрел существующую кодировку сервера мускуль, исправил все на ср 1251, проблема не решилась. Во вторых, в php.ini default_charset поставил тоже 1251. Далее (как рекомендовал мне на форуме edge) в my.cnf в разделе [mysqld] прописал init-connect=”SET NAMES cp1251”… Но все осталось на месте… Никаких намеков на правильную работу. Я был в отчаянии.
Далее, чисто случайно, в качестве эксперимента (а что еще оставалось делать?) я ╚зарезал╩ права (да, да - именно ущемил в правах пользователя этой БД) и… о чудо! Все заработало!
Как я позже понял - init-connect=”SET NAMES cp1251” НЕ ДЕЙСТВУЕТ на пользователя БД root и других пользователей у которых права на базу выставлены как GRANT ALL PRIVELEGES ON…… (полагаю, сделано это для того, что если какой-нибудь пользователь напортачил с базой, пользователь root или другой пользователь со всеми правами для данной БД смог исправить ╚косяки╩). Ну и в php.ini установка нужной кодировки помогла.
Резюмируя:
Если возникает проблема подобного рода выполняем следующие действия:
1. Проверяем кодировку сервера MySQL (SHOW VARIABLES LIKE ‘char%’);
2. Устанавливаем нужную кодировку: SET имя_переменнной= … SET character_set_clien cp1251 SET character_set_connection cp1251 SET character_set_database cp1251 SET character_set_results cp1251 SET character_set_server cp1251 SET character_set_system utf8. Последнюю переменную мне поменять не удалось, видимо это и невозможно, т.к. сервер в ответ на мою попытку SET character_set_system= cp1251, отвечал что мол ERROR 1193 (HY000): Unknown system variable 'character_set_system'
3. В my.cnf в разделе [mysqld] прописываем init-connect=”SET NAMES cp1251”
4. В /etc/php.ini - выставляем: default_charset = “cp1251” - это тоже немаловажно, так как обработка базы (в моем случае) проводилась интерпретатором PHP.
5. И последнее - пользователю БД выставляем следующие права:
ВЫБОР ДАННЫХ ТАБЛИЦ
ВСТАВКА ДАННЫХ ТАБЛИЦ
ОБНОВЛЕНИЕ ДАННЫХ ТАБЛИЦ
УДАЛЕНИЕ ДАННЫХ ТАБЛИЦ
СОЗДАНИЕ ТАБЛИЦ
СБРОС ТАБЛИЦ
Этих прав пользователю - хватит сполна для работы с БД.
Таким образом, проблема была решена. Пишу эту статью, так как тема актуальна, и, надеюсь, что на эти грабли Вы уже не наступите.
С уважением, Игорь. В.Борисов aka WingMan
Последние комментарии
10 лет 22 недели назад
10 лет 41 неделя назад
10 лет 51 неделя назад
10 лет 51 неделя назад
11 лет 40 недель назад
11 лет 40 недель назад
11 лет 41 неделя назад
11 лет 41 неделя назад
11 лет 42 недели назад
11 лет 43 недели назад