Тема: PHP вместо вместо русского текста из MySQL выдает ???

Проблема - в phpmyadmin русский текст в ячейках таблицы могу нормально вводить,
при выводе через PHP-скрипт получаю знаки вопроса.
Как это исправить ?


Версии MySQL Server 5.1.26
клиент 5.0.51a
phpMyAdmin - 2.11.9.3


В PHP кодировки такие

Variable_name     Value
character_set_client     cp1251
character_set_connection     cp1251
character_set_database     cp1251
character_set_filesystem     binary
character_set_results     cp1251
character_set_server     cp1251
character_set_system     utf8 (<--вот тут пишут, что ее менять нельзя http://mysql2.mirrors-r-us.net/doc/refm … bles.html)



также пробовал везде включать utf-8

Variable_name     Value
character_set_client     utf8
character_set_connection     utf8
character_set_database     utf8
character_set_filesystem     binary
character_set_results     utf8
character_set_server     utf8
character_set_system     utf8


в  phpmyadmin написано (в обоих случаях), что
MySQL-кодировка:  UTF-8 Unicode (utf8)
и у самого phpmyadmin кодировка также всегда UTF8. Для интереса попробовал в первом случае переключить браузер в windows 1251 и попробовать ввести текст в ячейку - не получается.
В админе в setup.php в charset для localhost также пробовал ставить windows1251, все равно видны только ???


D

2

Re: PHP вместо вместо русского текста из MySQL выдает ???

Pasha_Moscow
Не мучайте phpMyAdmin, он здесь ни при чём.
В какой кодировке сайт?
Если в windows-1251, то сразу после функции подключения (mysql_connect), выполните следующий запрос устанавливающий кодировку соединения:
mysql_query( 'SET NAMES cp1251' );

3

Re: PHP вместо вместо русского текста из MySQL выдает ???

Hanut сказал:

Pasha_Moscow
Не мучайте phpMyAdmin, он здесь ни при чём.
В какой кодировке сайт?
Если в windows-1251, то сразу после функции подключения (mysql_connect), выполните следующий запрос устанавливающий кодировку соединения:
mysql_query( 'SET NAMES cp1251' );

На самой странице пробовал прописывать и charset=windows-1251 и charset=utf-8 (для первого и второго случая), все равно ???.
Возможно, я в самом начале инсталляции mysql что-то не то сделал (у меня стоит Multilanguage - UTF-8, пробовал через инсталлятро и в ручную менять на cp1251 - результата нет).
В консоли mysql.exe при select * from chartest также закорючки вместо русского выдаются.

4

Re: PHP вместо вместо русского текста из MySQL выдает ???

Pasha_Moscow
Если скрипт пишется вами, то решение указано выше.
Если скрипт не ваш, то для данных в cp1251, необходимо в my.ini, раздел [mysqld], добавить следующую строку:
init-connect="SET NAMES cp1251"

Также убедитесь в корректном значении данной директивы:
default-character-set=cp1251

Консоль выводит данные в кодировке cp866, поэтому крякозябы. Используйте phpMyAdmin, он всегда выводит то что находится в MySQL в том виде, в каком данные существуют.

Обратите внимание на данную статью: Инструментарий веб-разработчика.

5 (изменено: Hanut, 2008-11-03 14:27:01)

Re: PHP вместо вместо русского текста из MySQL выдает ???

Спасибо, помогла вставка SET NAMES в скрипт. Может быть, это в FAQ занести ?
Т.к. SET NAMES командой через MySQL и добавление SET NAMES в init-connect  не помогало.
Мой-не мой скрипт - в смысле, кто его писал, или где он расположен (есть доступ к редактированию или нет) ?

6

Re: PHP вместо вместо русского текста из MySQL выдает ???

Pasha_Moscow сказал:

Т.к. SET NAMES командой через MySQL и добавление SET NAMES в init-connect  не помогало.

SET NAMES действует только на время активного соединения (сессии).
После внесения изменения в my.ini надо было перезагрузить сервис MySQL, после этого init-connect заработал бы.

Pasha_Moscow сказал:

Мой-не мой скрипт - в смысле, кто его писал, или где он расположен (есть доступ к редактированию или нет) ?

В смысле - если это какой-то форум или движок, то в них, как правило, предусмотрена конфигурационная директива устанавливающая кодировку соединения с MySQL. Таким образом надо ее только установить. При написании собственного скрипта необходимо также предусмотреть такую возможность.

MySQL 4.1+ и любые проблемы с русскими буквами