Добрый день, уважаемые.Поднял сервер в локальной сети. В качестве серверной системы использую Fedora Core 4. Все демоны родные, т.е. новые версии из инета не выкачивал и не обновлял. Поднял HTTP+PHP+MYSQL. Поставил phpMyAdmin чтобы админить MySQL. Для общения залил PHP-Nuke-7.9.0_3.2_20_Rus. Столкнулся со следующей проблемой:
Сервер коректно отображает русские символы, которые находятся в php файлах, но то, что вытаскивает из MySql, отображет криво (вот так - ???????). Делаю вывод, что проблема с перекодировкрй данных MySQL. Данные в MySQL импортировал из внешенго файла с помощью phpMyAdmin (кто ставил phpnuke, тот знает). При этом какие кодироки для импорта только не указывал, и utf8, и cp1251, даже KOI8-R и KOI8-U пробовал. Отображает все равно не корректно. Заметил, что сам phpMyAdmin отбражает все в utf8.
Что делать, не знаю. Может подскажите?
>Сервер коректно отображает русские символы, которые находятся в php файлах, но то,
>что вытаскивает из MySql, отображет криво (вот так - ???????). Делаю
>вывод, что проблема с перекодировкрй данных MySQL. Данные в MySQL импортировал
>из внешенго файла с помощью phpMyAdmin (кто ставил phpnuke, тот знает).
>При этом какие кодироки для импорта только не указывал, и utf8,
>и cp1251, даже KOI8-R и KOI8-U пробовал. Отображает все равно не
>корректно. Заметил, что сам phpMyAdmin отбражает все в utf8.Если есть доступ к шелл- запустите mysql - u root -p введите пароль (если пароль отсутствует? то -р не надо) и затем дайте команду show variables;
Обращайте внимание в какой кодировке указаны следующие переменные:
| character_set_client |
| character_set_connection |
| character_set_database |
| character_set_results |
| character_set_server |
| character_set_system || collation_connection |
| collation_database |
| collation_server |Для быстрой проверки используйте
set character_set_client=UTF8; (кодировку нужную подставите)
и так для остальных переменных. Лучше прописать переменные в my.cnfPHPMyAdmin корректно отображает данные из импортированной базы данных?
Если корректно, то база импортировалась нормально. Если некорректно, то в шеле необходимо (после входа в майскъюль клиента mysql - u root -p) создать запрос к какой-либо из таблиц в вашей импортированной базе:
use YOUR_DB_NAME (YOUR_DB_NAME - название Вашей базы)
select * from your_table_name; (your_table_name - название какой-нибудь таблицы в данной базе, где есть записи).
Если отображается нормально - то база импортировалась корректно.
При этом, если в PHPMyAdmin отображаются каракули - смотрите настройки mysql (особенно | character_set_client, character_set_connection, character_set_results)
После настройки сервера мускул, PHPMyAdmin должен начать корректно отображать данные из бд (если до этого были проблемы). Проблема может быть также и в настройках скриптов пхп.
надо перед запросами в скриптах указывать "Set Names=UTF8;" (или другую необходимую Вам кодировку)
>PHPMyAdmin корректно отображает данные из импортированной базы данных?Да, корректно, но сам phpMyAdmin выводит HTML страницу в кодировке utf8 - это принципиально? По тому, как phpnuke выводит в cp1251.
>Проблема может быть также и в настройках скриптов пхп.
>надо перед запросами в скриптах указывать "Set Names=UTF8;" (или другую необходимую Вам
>кодировку)Возможно тут проблема? Может надо надстроить php.conf?
up
после коннекта с базой выполнить запрос
mysql_query("SET NAMES ваша_кодировка");
Если не поможет
mysql_query ("set character_set_client='cp1251'");
mysql_query ("set character_set_results='cp1251'");
mysql_query ("set collation_connection='cp1251_general_ci'");
Также
CREATE DATABASE yourbase CHARACTER SET ‘cp1251?
Кроме того, есть полезная весчь: после того как создана база, но еще не созданы
таблицы, сделать оператор "alter database БАЗА default charset cp1251".
>после коннекта с базой выполнить запрос
>mysql_query("SET NAMES ваша_кодировка");
>Если не поможет
>mysql_query ("set character_set_client='cp1251'");
>mysql_query ("set character_set_results='cp1251'");
>mysql_query ("set collation_connection='cp1251_general_ci'");
>Также
>CREATE DATABASE yourbase CHARACTER SET ‘cp1251?
>Кроме того, есть полезная весчь: после того как создана база, но еще
>не созданы
>таблицы, сделать оператор "alter database БАЗА default charset cp1251".Спасибо, помогло!!!
А как бы настроить MySQL чтобы эти кодировки были прописанны там по умолчанию?
set character_set_client='cp1251' в консоли почему-то не проходит.
В my.cnf в секции [mysqld] допиши:
default-character-set=cp1251
init-connect="SET NAMES cp1251"
PS Пробовал на ОС RHEL4 и FC6
>В my.cnf в секции [mysqld] допиши:
>default-character-set=cp1251
>init-connect="SET NAMES cp1251"
>PS Пробовал на ОС RHEL4 и FC6
у меня такое работает на FreeBSD 6.1
>
>>Сервер коректно отображает русские символы, которые находятся в php файлах, но то,
>>что вытаскивает из MySql, отображет криво (вот так - ???????). Делаю
>>вывод, что проблема с перекодировкрй данных MySQL. Данные в MySQL импортировал
>>из внешенго файла с помощью phpMyAdmin (кто ставил phpnuke, тот знает).
>>При этом какие кодироки для импорта только не указывал, и utf8,
>>и cp1251, даже KOI8-R и KOI8-U пробовал. Отображает все равно не
>>корректно. Заметил, что сам phpMyAdmin отбражает все в utf8.
>
>Если есть доступ к шелл- запустите mysql - u root -p введите
>пароль (если пароль отсутствует? то -р не надо) и затем дайте
>команду show variables;
>Обращайте внимание в какой кодировке указаны следующие переменные:
>| character_set_client
> |
>| character_set_connection |
>| character_set_database |
>
>| character_set_results
>|
>| character_set_server
> |
>| character_set_system
> |
>
>| collation_connection
> |
>| collation_database
> |
>| collation_server
> |
>
>Для быстрой проверки используйте
>set character_set_client=UTF8; (кодировку нужную подставите)
>и так для остальных переменных. Лучше прописать переменные в my.cnf
>
>PHPMyAdmin корректно отображает данные из импортированной базы данных?
>Если корректно, то база импортировалась нормально. Если некорректно, то в шеле необходимо
> (после входа в майскъюль клиента mysql - u root
>-p) создать запрос к какой-либо из таблиц в вашей импортированной базе:
>
>use YOUR_DB_NAME (YOUR_DB_NAME - название Вашей базы)
>select * from your_table_name; (your_table_name - название какой-нибудь таблицы в данной базе,
>где есть записи).
>Если отображается нормально - то база импортировалась корректно.
>При этом, если в PHPMyAdmin отображаются каракули - смотрите настройки mysql (особенно
>| character_set_client, character_set_connection, character_set_results)
>После настройки сервера мускул, PHPMyAdmin должен начать корректно отображать данные из бд
>(если до этого были проблемы). Проблема может быть также и в
>настройках скриптов пхп.
>надо перед запросами в скриптах указывать "Set Names=UTF8;" (или другую необходимую Вам
>кодировку)Меня спасло вот это:
[mysqld]
character_set_client = utf8
collation_server = utf8_general_ciНо PHPMyAdmin продолжает показывать данные в таблица в карякулях... я несовсем понял, чем лечится сие чудо?
Спасибо за помощь! Помогло это (perl, DBD):$sth=$dbh->Query("set character_set_client='cp1251'");
$sth=$dbh->Query("set character_set_results='cp1251'");
$sth=$dbh->Query("set collation_connection='cp1251_general_ci'");