Почитайте доки к DBD::ODBC, там есть про Unicode и поддержка зависит от версии и от драйвера FreeTDS.<br><br><div class="gmail_quote">2012/12/18 Павел Купцов <span dir="ltr"><<a href="mailto:pavel@kuptsov.info" target="_blank">pavel@kuptsov.info</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>Нашел частичное решение:</div><div>$dbh->{odbc_utf8_on} = 1;</div><div><br></div><div>Но почему-то работает не для всех полей...</div>
<div>Почему - не понятно.</div><div>К примеру выборка вроде такой:</div><div><div>
SELECT </div><div>          t0.DocNum,</div><div>          (CASE WHEN t1.CardFName IS NULL THEN t0.CardName ELSE t1.CardFName END) AS CardName,</div><div>          .....</div><div>          t0.DocCur</div><div>    FROM dbo.OINV t0 </div>

</div><div>....</div><div><br></div><div>выдает поле CardName - нормально, а DocCur - крякозябра.</div><div>При этом типы полей одинаковые nvarchar, только длины разные ( 15 и 3)</div><div><br></div><div>и запросы типа:</div>

<div>...</div><div>CASE WHEN var=300 THEN N'такое-то'</div><div>...</div><div>возвращает криво (значения от THEN) ...</div><div><br></div><div>Вот такой DSN не проходит:</div><div>$DSN = 'Sybase:server=192.168.0.1;database=MYDATABASE;packetSize<br>

=8192;language=us_english;charset=iso_1';</div><div><br></div><div>у меня DSN построен так (в конфиге)</div><div> dsn => 'dbi:ODBC:MSSQL7',</div><div>в скрипте</div><div>my $dbh = DBI->connect("$cfg->{db}{dsn}", $cfg->{db}{uid},$cfg->{db}{pwd}, { PrintError=>1, RaiseError => 1}) or die "$DBI::errstr\n";</div>

<div><br></div><div>MSSQL7 - имя odbc-коннекта из odbc.ini</div><div><br></div><div>чарсет в именно DSN не получается впихнуть (да и он указан в ini вроде бы).</div><div><br></div><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<br style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif"><span style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">Приветствую !</span><br style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">

<br style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif"><span style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">По своему опыту использования подобного подключения, был</span><br style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">

<span style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">существенный минус: не работает с  бинарными полями ( по крайней мере</span><br style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">

<span style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">8 лет назад).</span><br style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">
<br style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif"><span style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">кодировку можно указать в DSN, но использовалась следующая:</span><br style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">

<span style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">  $DSN = 'Sybase:server=192.168.0.1;</span><span style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">database=MYDATABASE;packetSize</span><br style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">

<span style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">=8192;language=us_english;</span><span style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">charset=iso_1';</span><br style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">

<br style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif"><span style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">размер ответов по умолчанию мал:</span><br style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">

<span style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">      $dbh->{LongReadLen} = 5000000;</span><br style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">
<br style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif"><span style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">ответ $DBI::errstr в кодировке windows-1251 (для русской версии), поэтому:</span><br style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">

<span style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">      encodeToUTF8( 'windows-1251',  $DBI::errstr );</span><br style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">

<br style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif"><span style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">приходилось по  делать:</span><br style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">

<span style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">  decode( 'utf8', $str ) unless utf8::is_utf8($str)</span><div style="color:rgb(34,34,34);font-size:13px;width:22px;font-family:arial,sans-serif;margin:2px 0px 0px;padding:10px 0px;outline:none">

<div style="background-color:rgb(241,241,241);border:1px solid rgb(221,221,221);clear:both;line-height:6px;outline:none;width:20px"><img style="background-image:url();min-height:8px;width:20px;background-repeat:no-repeat no-repeat"></div>

<div><br></div></div></blockquote></div>
<br>--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br>Best regards, Ruslan.<br>