1

Тема: Данные таблиц на кириллице phpMyAdmin отображает некорректно.

Добрый день!
Уважаемые специ, помогите разобраться с проблемой. При просмотре через phpMyAdmin  в таблицах кириллица отображается в виде Алексей. Прочитал много тем и на этом форуме и на других. Изначально были настройки в MySQL latin1, все поменял на UTF8. Заменил MySQL 4.1. на MySQL 5.5. , но это не помогло...

На сайте все отображается корректно (и до манипуляций и после). Все установлено на локальной машине.

Текущая конфигурация: Windows7+Apache/2.2.17 (Win32) +PHP 5.2.17+MySQL 5.5.14+phpMyAdmin  2.9.0

Переменные MySQL:
basedir    C:/Program Files/MySQL/MySQL Server 5.5/
character set client           utf8
character set connection    utf8
character set database    utf8
character set filesystem    utf8
character set results    utf8
character set server     utf8
character set system    utf8
character sets dir    C:\Program Files\MySQL\MySQL Server 5.5\share\charsets\
collation connection    utf8_unicode_ci
collation database    utf8_unicode_ci
collation server    utf8_unicode_ci

Помогите разобраться, мозг кипит. Может я не там ищу???

2

Re: Данные таблиц на кириллице phpMyAdmin отображает некорректно.

Обнаружил еще один момент.
Если данные вводить через PMA, то через РМА кириллица отображается правильно, а вот на сайте выводит вопросы!!!
Явно несоответствие кодировок, но как устранить это.
Форма ввода сайта <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
В обработчике явно не указана кодировка, как понимаю тоже должна быть utf-8.

3

Re: Данные таблиц на кириллице phpMyAdmin отображает некорректно.

Необходима перекодировка данных и последующая установка для скрипта кодировки соединения с MySQL в utf8.

1) Убедитесь, что у скрипта есть конфигурационная директива для установки кодировки соединения с MySQL, обычно что-то вроде charset. Если ничего такого нет, то необходимо поиском по файлам скрипта найти вхождение функции mysql_connect и сразу после нее добавить строку:

mysql_query('SET NAMES utf8');

2) Перекодировку данных локально можно сделать с помощью mysqldump.

mysqldump --user=root --password=pass --default-character-set=latin1 db_name > dump.sql

Пропишите пароль пользователя root и укажите базу данных (db_name). Обратите внимание на ключ default-character-set, он должен быть именно latin1.

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

4

Re: Данные таблиц на кириллице phpMyAdmin отображает некорректно.

Спасибо, Hanut!
Вариант с mysql_query('SET NAMES utf8'); уже пробовал, получается, и РМА и сайт показывает правильно.

Как я понимаю mysql_query('SET NAMES utf8') устанавливает кодировку клиента БД (в данном случае скрипта php) определяемую переменными character_set_client, character_set_connection и character_set_results .

Но остается вопрос, зачем каждый раз прописывать mysql_query('SET NAMES utf8'), если в my.ini  уже установлены все character set в utf8?  Или я что-то не так понимаю?

Кстати, сохранность данных сейчас не критична, т.к. сайт и БД в разработке.

5

Re: Данные таблиц на кириллице phpMyAdmin отображает некорректно.

AlexKh сказал:

Но остается вопрос, зачем каждый раз прописывать mysql_query('SET NAMES utf8'), если в my.ini  уже установлены все character set в utf8?  Или я что-то не так понимаю?

Уточните каким именно образом у вас прописан character set в utf8?

Единственное, что устанавливает кодировку соединения с MySQL - это SET NAMES.

6 (изменено: AlexKh, 2011-08-15 10:39:52)

Re: Данные таблиц на кириллице phpMyAdmin отображает некорректно.

Hanut сказал:

Уточните каким именно образом у вас прописан character set в utf8?

Это часть моего my.ini
[client]
port=3306
character-sets-dir="C:/Program Files/MySQL/MySQL Server 5.5/share/charsets"
[mysql]
default-character-set=utf8
[mysqld]
port=3306
character-sets-dir="C:/Program Files/MySQL/MySQL Server 5.5/share/charsets"
init-connect="SET NAMES utf8"
basedir="C:/Program Files/MySQL/MySQL Server 5.5/"
datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"
character-set-server=utf8
character-set-filesystem=utf8
collation-server=utf8_unicode_ci

7

Re: Данные таблиц на кириллице phpMyAdmin отображает некорректно.

В конфигурационном файле все правильно. Только обратите внимание, что скрипты нельзя подключать под root, для них обязательно следует создавать отдельного пользователя не имеющего привилегий из раздела "Администрирование".

Строку установки кодировки соединения следует писать всегда, чтобы при переносе на хостинг, настройки хостинга не изменили работу скрипта с кодировками.
mysql_query('SET NAMES utf8');

8

Re: Данные таблиц на кириллице phpMyAdmin отображает некорректно.

Hanut сказал:

Только обратите внимание, что скрипты нельзя подключать под root, для них обязательно следует создавать отдельного пользователя не имеющего привилегий из раздела "Администрирование".

Пользователь у меня в скрипте отличен от root, но имел глобальные привилегии. Убрал привилегии раздела "Администрирование", в скриптах заремил  mysql_query('SET NAMES utf8');, и о чудо, все работает правильно!!!
Вот где собака порылась! Спасибо!

А почему привилегии влияют на кодировки? Мне кажется связь далеко не очевидная. Это так задумывалось, или просто баг?

9

Re: Данные таблиц на кириллице phpMyAdmin отображает некорректно.

AlexKh сказал:

А почему привилегии влияют на кодировки? Мне кажется связь далеко не очевидная. Это так задумывалось, или просто баг?

Привилегии уровня администратора устанавливают кодировку соединения с MySQL в latin1, чтобы не было проблем с приемом данных администратора. Как правило, это относится только root, и административных привилегий у других пользователей быть не должно.

10

Re: Данные таблиц на кириллице phpMyAdmin отображает некорректно.

Hanut сказал:

Привилегии уровня администратора устанавливают кодировку соединения с MySQL в latin1

Теперь все понятно. Спасибо за консультации!