Обсуждение статьи тематического каталога: Настройка работы Perl скриптов совместно с MsSQL (perl database win)Ссылка на текст статьи: http://www.opennet.me/base/dev/perl_mssql.txt.html
IMHO, базу забыли в примере$dbh = DBI->connect('DBI:Sybase:server=<host>;port=<port>;database=<base>', 'username', 'password');
Перечитал статью, которая получилась после публикации, а так же получил пару писем с репортами, чувствую надо сдалать пару исправлений.1.
Вместо
(В строке 92 добавить $SYBASE=’/usr/local’)
надо
(В строке 92 добавить $SYBASE=/usr/local)
2.
У тех, у кого эта строка не 92, то вставьте эту стороку перед проверкой переменной $SYBASE. Эту проверку найти нетрудно.
А вообще там есть файл CONFIG, в нем описываются переменные, эту переменную можно попробовать описать ее там.
3.
Последняя редакция скрипта, взял так, как оно работает у меня, если скрипт комментария не добавит/уберет чего, то можете пользоваться:
#!/usr/bin/perl
use DBI;
my @data;
$dbh=DBI-connect('DBI:Sybase:server=192.168.0.7:1433','dbreader','dbreadersql')or die Couldn't connect to database: " . DBI->errstr;
my $sth=$dbh->prepare('select usernamefrom users');
$sth->execute();
while (@data=$sth->fetchrow_array())
{
my $x=@data[0];
print "result\t $x\n";
}
1. Имя базы можно указывать прямо в запросе.
2. У меня подключается без указания базы потому что он имеет права только на одну базу.
Как решить проблемму с кодировкой, русские символы отоброжаются неправильно.
Я задавал такой же здесь вопрос и решил так:
/usr/local/etc/freetds.conf или ~/.freetds.conf
должны содержать строки:
client charset = cp1251
в секциях [global] или [any_server]Пробовал устанавливать кодировку koi8-r, но в версии freetds-0.62.tar.gz
мне выдает ошибку операции с плавающей точкой. Приходится дополнительно использовать Text::Iconv.Пробовал также указывать кодировку клиента в строке соединения:
my $dbh = DBI->connect("dbi:Sybase:server=server:1433;database=master;charset=cp1251", $user, $password);
Нужного результата здесь не получается.
Где-то символы глотает (пробел скушало):
my $sth=$dbh->prepare('select usernamefrom users');
в запросе должно быть
select username from
У меня все работает, но не могу получить ответ от сервера MSSQL2000 в нормальной кодировке: выдает знаки ???. Видимо где-то происходит преобразование в Unicode. В документации DBD::Sybase говорится про указатель на кодировку клиента - charset. Пробовал разные кодировки, но ничего не менялось (cp1251, iso_1).В документации по TDS также говорится про перекодировку - iconv, но как настроить не понятно.
Куда копать?
Q: У меня все работает, но не могу получить ответ от сервера MSSQL2000 в нормальной кодировке: выдает знаки ???.---------------
A: Как уже было сказано: /usr/local/etc/freetds.conf или ~/.freetds.conf
должны содержать строки:
client charset = cp1251
в секциях [global] или [any_server]
Да, но в начала статьи речь шла о MSSQL, а содержание про Sybase. Может имелось ввиду DBI:ODBC?
Как сделать связку FreeTDS и PERL?