в phpMyAdmin все в виде: ЧаВО ...

  • Автор темы Автор темы aZa
  • Дата начала Дата начала

aZa

Новичок
в phpMyAdmin все в виде: ЧаВО ...

Сайт полностью работает на UTF8, все отлично отображается и работает, но вот заставить phpMyAdmin корректно отображать данные никак не получается - все у него в виде:
ЧаВО
Арты
и прочее

При попытке выполнить в том же PMA запрос вида:
SELECT title, CONVERT(CONVERT(title USING binary) USING cp1251) FROM table;

Вместо значений выше получаем:
ЧаВО
Арты

Если в предыдущий запрос вместо cp1251 подставить utf8, оба поля в возвращаемом селекте идентичны. И база, и таблица и соответсвующее поле имеют collation 'utf8_general_ci'.

Перечитал кучу факов, но не могу определить где же именно суть проблемы или это вообще проблемы сугобо PMA (все остальное работает великолепно).

Пните в нужном направлении - где копать. :D

-~{}~ 21.12.05 17:31:

Еще могу добавить, что путем "научного Тыка", маленькая буква "ф", введенная скриптом в базу, превращается в PMA в "С„" (C и символ, похожий на две запятые) ... между тем на страницах она попрежнему великолпно отображается меленькой русской "ф".
 
Полагаю что нужно выбрать правильный language на первом экране phpMyAdmin.
Или, если там нет подходящего, то нужно настроить
<meta http-equiv="Content-Type" content="text/html; charset="">
 
Проблему исправило добавление:
mysql_query('SET CHARACTER SET utf8;', $connection);

Теперь и PMA, и скрипты корректно отображают данные в UTF-8 ... Но встает другая проблема - а в чем же тогда хранятся данные, которые были "забиты" до этого фикса и как же их преобразовать в корректный UTF-8.

То есть вопрос в том каким образом "С„" превращается в "ф" и наоборот, какая схема преобразований?..

P.S.: HTTP заголовок корректно отдается как utf-8, что такое myltubyte - не в курсе, используется виртуальный сервер у "общедоступного" хостера, используемые ini-файлы не предоставляет. :(
 
любопытно, каким образом PHP определяет, в каком виде *отдавать* [mysql_query('INSERT ...') и иже с ними] данные в MySQL ... я, честно говоря, полагал, что сам MySQL устанавливает это значение в зависимости от collation базы на этапе mysql_select_db(), но это точно не так у моего хостера. неужели единственный выход практически вручную выставлять это дело, запуская mysql_query('SET CHARACTER SET utf8;', $connection)?
 
aZa
Сам MySQL ничего не делает, без просьбы. А клиент просит либо cp1251, либо latin1 в зависимости от кривизны хостера. Даже больше "SET NAMES кодировка" это ни в коем случае не "проблема", ведь при соединении с сервером ты указываешь какую базу данных использовать? Ну так и скажи серверу, который умеет работать с кучей кодировок в какой кодировке ты с ним хочешь общаться.
 
Собственно так и сделал. Я вообще не понимаю почему народ до сих пор испольует "cp1251", если уже давным-давно есть UTF-8 ...
 
aZa

Если бы за перевод из cp1251->utf8
платили бы хотя бы 10$
я был бы первый в очереди :-)
 
Сверху