PEAR:DB // Codepage

neuro

Guest
PEAR:DB // Codepage

Как задать кодовую страницу для работы базой? Нигде не могу найти... :-/
 

Nikit

Guest
так а если с коннектом просто послать запрос типа ("SET NAMES CP1251"),

тогда как? - не работает?

С уважением,
Nikit@
 

neuro

Guest
Проблему решил иначе:

в php.ini можно указать: ibase.default_charset = UNICODE_FSS

правда, косяки всё равно есть. сама база содержит в себе WIN1251 а я дергаю от туда Unicode, и если IB не может законвертить символ/слово из Win1251->Unicode то выборка(select) не осуществляется.

пока проблемму решил, но коряво.
Думаю указать в default_charset = WIN1251, а с помощью php конвертить. Только пока не знаю как это делать. :-\

Поэтому вопрос:
есть $array - результат SELECT'а из базы. если этот $array содержит WIN1251 как его законвертить?
И есть предположение что сам PEAR::DB "бьет" кодировку 1251 во время выборки из БД. Хотя могу и ошибаться.
 

encyclop

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

Решил проблему так:

после создания первого в соединения с базой...

надо выполнить три запроса

$db->query("set character_set_client='cp1251'");
$db->query("set character_set_results='cp1251'");
$db->query("set collation_connection='cp1251_general_ci'");

Вот так... И никаких проблем... По крайней мере, у меня.
 

cryo

Guest
Re: PEAR:DB // Codepage

Автор оригинала: neuro
Как задать кодовую страницу для работы базой? Нигде не могу найти... :-/
Для Firebird я делаю в DSN

ibase://SYSDBA:masterkey@tcp(server1)/d:/base.gdb?dialect=3&charset=win1251

-~{}~ 16.05.05 18:06:

Автор оригинала: neuro

есть $array - результат SELECT'а из базы. если этот $array содержит WIN1251 как его законвертить?
И есть предположение что сам PEAR::DB "бьет" кодировку 1251 во время выборки из БД. Хотя могу и ошибаться.
Сам PEAR:DB ничего с кодировками не делает. Что ему приходит из ibase_* функций то и передает.

$q = $db->query('SELECT трампампам');
while ($r=$q->fetchRow(DB_FETCHMODE_OBJECT)
{
foreach($r as $id=>$field) if (!is_int($field) && !is_float($field)) $r[$id] = iconv('CP1251', 'UTF-8', $r[$id]);
}
 
Сверху