PHP5 mysqli character set

CM

Guest
PHP5 mysqli character set

Коллеги, прошу прощения, что задаю вопрос здесь, а не в конфе "PHP & W$NDOWS". Просто траффик там совсем мертвый, а нужен быстрый и квалифицированный совет...

Кто-нибудь уже работал с новыми функциями mysqli под виндами (через libmysqli.dll)? Работаю дома над миграцией кое-каких скриптов под PHP5 и выяснилось, что под виндозной версией, судя по всему, mysqli не поддерживает никакие другие чарсеты кроме latin1. На production Linux-сервере, где все собрано своими руками - все отлично. Под мелкософтом - нет. Кто-нибудь уже сталкивался с этим? Действительно ли дело в самой библиотеке libmysqli.dll? Можно ли ее как-то перекомпилировать для включения cp1251? Если да - может ли кто-нибудь помочь с компиляцией? (у самого такой возможности нет).

-~{}~ 14.08.04 23:21:

Вот пример вывода запроса "SHOW VARIABLES" (приведена только часть, касающаяся чарсетов)...

1. При использовании "старых" функций (mysql):

Код:
character_set_client cp1251  
character_set_connection cp1251  
character_set_database cp1251  
character_set_results cp1251  
character_set_server cp1251  
character_set_system utf8
2. Абсолютно тот же скрипт, но при использовании "новых" функций (mysqli):

Код:
character_set_client latin1  
character_set_connection latin1  
character_set_database cp1251  
character_set_results latin1  
character_set_server cp1251  
character_set_system utf8
Во втором случае, соответственно, весь кириллический текст заменяется знаками вопроса.

Естественно, что все остальное, кроме используемых функций, - полностью идентично. Конфигурация - Apache 2.0.49 / PHP 5.0.1 / MySQL 4.1.3.

Повторюсь еще раз, что пол линуксом все ОК (конфигурация - Apache 1.3.31 / PHP 5.0.1 / MySQL 4.1.3).
 

fixxxer

К.О.
Партнер клуба
latin1
cp1251
длина одинаковая :)

берем hiew/winhex и вперед
 

CM

Guest
Я в шоке!

Когда fixxxer сказал:

берем hiew/winhex и вперед
Я был в полном шоке - думал это такая "шутка юмора" - править руками ddl-ки WinHex-ом :eek:

Однако он оказался 100% прав. Тупо поправил руками libmysqli.dll в 3-4 местах на правильные чарсеты и все заработало :)

fixxxer - спасибо, коллега!

P.S. Если кому-то нужна "исправленная" на предмет cp1251 libmysqli.dll для PHP 5.0.1 - можете качать по ссылке вот отсюда (zip, 543Кб)
 

xVic

Guest
Помогите, плиз, настроить mysqli на работу с utf8.

Делаю SET names utf8;

Show variables like 'character\_set\_%' выдает:

character_set_client - utf8
character_set_connection - utf8
character_set_database - utf8
character_set_results - utf8
character_set_server - utf8
character_set_system - utf8,

а client_encoding() все равно показывает latin1_swedish_ci :(

Таблицы еcсно создавались и заполнялись в utf8.

У меня - WinXP, Apache 2.0.50 / PHP 5.0.2 / MySQL 4.1.7

ЗЫ Смотрел hiew-ом, упоминаний про utf8 в коде dll-ки полно.
 

slach

Новичок
client encoding
задается в my.cnf
который лежит на файле клиента...
 

xVic

Guest
задается в my.cnf
который лежит на файле клиента...
C:\Program Files\mysql\MySQL Server 4.1\my.ini
Пробовал переименовать в my.cnf и положить в:

c:\
c:\windows
c:\windows\system32
c:\Program Files\PHP

Не помогает.

ЗЫ: Секция [client]
и default-character-set=utf8 в my.cnf имеется.
 

slach

Новичок
ну, может extension сам по себе глючный и про кодировки ничего не знает
 

xVic

Guest
mysqli_options() + MYSQLI_READ_DEFAULT_FILE ?
Да, по такой схеме работает:
$link = mysqli_init();
$link->options(MYSQLI_READ_DEFAULT_FILE, "C:\\Program Files\\mysql\\MySQL Server 4.1\\my.ini");
$link->real_connect("localhost","","","db");

А как узнать этот где этот MYSQLI_READ_DEFAULT_FILE?
 

tony2001

TeaM PHPClub
попробуй вместо MYSQLI_READ_DEFAULT_FILE использовать MYSQLI_READ_DEFAULT_GROUP.
вместо value - указать соотв-щую группу из my.cnf
путь к дефолтовому файлу он сам должен знать.
 

xVic

Guest
Зачем? Он же при указании файла "C:\\Program Files\\mysql\\MySQL Server 4.1\\my.ini" читает нужную секцию и правильно выставляет client_encoding в utf8

Значит, надо узнать куда положить дефолтовый cnf, чтобы в скриптах не заморачиваться с MYSQLI_READ_DEFAULT_FILE.
 

xVic

Guest
То есть он знает путь к "C:\\Program Files\\mysql\\MySQL Server 4.1\\my.ini" ?
 

.::PhoenikS::.

Новичок
глянь, может это поможет, у меня работает незовисимо от платформы.
после коннекта сразу выполняется запрос вида

SET CHARACTER SET utf8;
SET NAMES utf8;

и получается счастье вместо знаков вопроса )))
 

.::PhoenikS::.

Новичок
Сверху