PHP, mysql, utf8 и кракозяблы :(

EGG01

Новичок
PHP, mysql, utf8 и кракозяблы :(

Итак, есть проблема.
Имеется небольшая база, в которой данные хранятся в utf8 и кодировка в mysql выставлена в utf8_unicode_ci.
при просмотре этой базы из myphpadmin - все данные отображаются нормально, на русском языке.
Во всех конфигах, что php, что mysql, что апача выставлен чарсет = utf8.

Но! при работе php скрипта (если явно не указать mysql_set_charset(utf8)) получаем на выходе кракозяблы, вернее сплошные знаки ??? вместо русских букв.
Внимательное курение форумов показало, и пляски с бубном в конфигах php/mysql результатов не дало.

Может коллективный разум подскажет где копать ?

скрипты живут по адресу http://invent.rcen-nt.ru/test00.php - тут без mysql_set_charset,
http://invent.rcen-nt.ru/test01.php - тут с mysql_set_charset,
ну и для информации тут еще есть phpinfo(); http://invent.rcen-nt.ru/phpinfo.php
 

Вурдалак

Продвинутый новичок
EGG01, mysql_set_charset() должна всегда быть. Вне зависимости от того, что в конфигах.
 

EGG01

Новичок
Автор оригинала: Вурдалак
EGG01, mysql_set_charset() должна всегда быть. Все зависимости от того, что в конфигах.
Все был бы хорошо, опять-же но есть некое но.
Разработчик который у нас работает с этой базой использует RadPHP для изготовления кода, и где там воткнуть mysql_set_charset() - никто не знает, это во первых,
а во вторых -- почему-то в исходниках phpMyAdmin-a я не увидел mysql_set_charset(), а все выводится просто на ура.
 

Вурдалак

Продвинутый новичок
«Втыкать» надо сразу после установления соединения с СУБД. В PMA, возможно, используется запрос
Код:
SET NAMES ...
вместо этой функции.
 

EGG01

Новичок
Внимательное курение данного мануала не привело к желаему результату. :(
Единственный пока выход, учитывая вышесказанное - пересобрать полностью и mysql и php из сорцов, с явным указанием default_charset=utf8

-~{}~ 25.09.10 19:17:

Автор оригинала: Вурдалак
«Втыкать» надо сразу после установления соединения с СУБД. В PMA, возможно, используется запрос
Код:
SET NAMES ...
вместо этой функции.
RadPHP в использует в качестве библиотеки для работы с базами AdoDB, я там запарился искать :(
Но все равно спасибо.
 

Фанат

oncle terrible
Команда форума
вряд ли пересборка поможет.
init-connect

но только надо понимать сначала, что все что выставлено и прописано к описанной проблеме никакого отношения не имеет.
и все описанное работает как надо
 

EGG01

Новичок
Автор оригинала: *****
вряд ли пересборка поможет.
init-connect

но только надо понимать сначала, что все что выставлено и прописано к описанной проблеме никакого отношения не имеет.
и все описанное работает как надо
init-connect -- что это ??

Смотри, база в utf8. в настройках мускуля явно прописано что default_charset=utf8 (этого не было, поставил в конфиг вручную, проверил с командной строки - все стало ок, выдается по русски), в настройках php тоже явно указан default_charset=utf8, тоесть по идее обмен данными между php и mysql идет в utf8.
где она теряется - я не могу найти, скорее всего дело в том, что php собран со своей внутренней библиотекой mysql
 

Фанат

oncle terrible
Команда форума
по ссылке все объяснено. и что значит default_charset=utf8, и куда девается.
только про пхпшное default_charset=utf8 ничего не написано, но это я тебе и так могу сказать, что ни к безем данных, ни тем более к одному из драйверов одной из баз данных это никакого отношения не имеет.

init-connect это то что тебе нужно
 

EGG01

Новичок
Автор оригинала: *****
по ссылке все объяснено. и что значит default_charset=utf8, и куда девается.
только про пхпшное default_charset=utf8 ничего не написано, но это я тебе и так могу сказать, что ни к безем данных, ни тем более к одному из драйверов одной из баз данных это никакого отношения не имеет.

init-connect это то что тебе нужно
Прочитал мануалы на предмет init-connect,
Вставил в my.cnf строчки:

[client]
port = 3306
socket = /var/run/mysql/mysql.sock
default-character-set = utf8
default-collation = utf8_unicode_ci
init-connect="SET NAMES utf8"
init-connect="SET CHARACTER SET utf8"
init-connect="SET CHARSET utf8"

[mysqld]
port = 3306
socket = /var/run/mysql/mysql.sock
skip-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
default-character-set = utf8
default-collation = utf8_unicode_ci
init-connect="SET NAMES utf8"
init-connect="SET CHARACTER SET utf8"
init-connect="SET CHARSET utf8"


Из скрипта делаю запрос
PHP:
MYSQL_CONNECT('192.168.15.254', 'invent', 'invent') or die ( "<H3>unable to connect to database server</H3>"); 
MYSQL_SELECT_DB('invent') or die ( "<H3>database does not exist</H3>"); 
$enc=mysql_client_encoding();
 print_r($enc);

И один фиг на выходе этого скрипта получаю - latin1

что я делаю не так ?
 

Фанат

oncle terrible
Команда форума
Для начала определись, оказали ли эти правки какое-то влияние на сервер.

и убери все, кроме SET NAMES. Смысла писать одно и то же три раза нет ни малейшего
 

EGG01

Новичок
Автор оригинала: *****
Для начала определись, оказали ли эти правки какое-то влияние на сервер.

и убери все, кроме SET NAMES. Смысла писать одно и то же три раза нет ни малейшего
Убрал, никакого результата. Все так-же "latin1". Если конкретно из скрипта делать mysql_query("SET NAMES utf8;") то все как надо.
Но мне хочется, чтобы было по умолчанию.
 

Фанат

oncle terrible
Команда форума
Штирлиц знал, что запоминается только последняя фраза
Поэтому писать что-либо еще - бесполезно...
 

EGG01

Новичок
Непонятно почему но все заработало после перезагрузки сервака.
Просто start|stop не срабатывало.
 

weregod

unserializer
> Просто start|stop не срабатывало.
скорее всего перезапускали apache, а не mysql
 
Сверху