[Moscow.pm] FreeTDS, MSSQL и кодировка (Aliaksandr Zahatski)

Ruslan Zakirov ruz на bestpractical.com
Вт Дек 18 10:38:20 PST 2012


Почитайте доки к DBD::ODBC, там есть про Unicode и поддержка зависит от
версии и от драйвера FreeTDS.

2012/12/18 Павел Купцов <pavel на kuptsov.info>

> Нашел частичное решение:
> $dbh->{odbc_utf8_on} = 1;
>
> Но почему-то работает не для всех полей...
> Почему - не понятно.
> К примеру выборка вроде такой:
> SELECT
>           t0.DocNum,
>           (CASE WHEN t1.CardFName IS NULL THEN t0.CardName ELSE
> t1.CardFName END) AS CardName,
>           .....
>           t0.DocCur
>     FROM dbo.OINV t0
> ....
>
> выдает поле CardName - нормально, а DocCur - крякозябра.
> При этом типы полей одинаковые nvarchar, только длины разные ( 15 и 3)
>
> и запросы типа:
> ...
> CASE WHEN var=300 THEN N'такое-то'
> ...
> возвращает криво (значения от THEN) ...
>
> Вот такой DSN не проходит:
> $DSN = 'Sybase:server=192.168.0.1;database=MYDATABASE;packetSize
> =8192;language=us_english;charset=iso_1';
>
> у меня DSN построен так (в конфиге)
>  dsn => 'dbi:ODBC:MSSQL7',
> в скрипте
> my $dbh = DBI->connect("$cfg->{db}{dsn}", $cfg->{db}{uid},$cfg->{db}{pwd},
> { PrintError=>1, RaiseError => 1}) or die "$DBI::errstr\n";
>
> MSSQL7 - имя odbc-коннекта из odbc.ini
>
> чарсет в именно DSN не получается впихнуть (да и он указан в ini вроде бы).
>
>
>
>> Приветствую !
>>
>> По своему опыту использования подобного подключения, был
>> существенный минус: не работает с  бинарными полями ( по крайней мере
>> 8 лет назад).
>>
>> кодировку можно указать в DSN, но использовалась следующая:
>>   $DSN = 'Sybase:server=192.168.0.1;database=MYDATABASE;packetSize
>> =8192;language=us_english;charset=iso_1';
>>
>> размер ответов по умолчанию мал:
>>       $dbh->{LongReadLen} = 5000000;
>>
>> ответ $DBI::errstr в кодировке windows-1251 (для русской версии), поэтому:
>>       encodeToUTF8( 'windows-1251',  $DBI::errstr );
>>
>> приходилось по  делать:
>>   decode( 'utf8', $str ) unless utf8::is_utf8($str)
>>
>>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
>


-- 
Best regards, Ruslan.
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20121218/d01e2524/attachment-0001.html>


Подробная информация о списке рассылки Moscow-pm