在Linux下使用perl通过unixODBC连接SQLServer2000
时间:2007-01-16 来源:darrenshen
在Linux下使用perl通过unixODBC连接SQLServer2000
作者:tonyvicky
来自:LinuxSir.Org
摘要:MS从来没有提供过SQLServer for Linux,所以大家也不要去尝试在Linux系统安装SQLServer,但是可以通过ODBC连接Windows系统的SQLServer数据库;
目录
一、关于测试环境及Linux连接SQL Server 的说明;
二、下载相关软件 unixODBC、freetds和DBD-ODBC
三、安装和配置;
-
1、安装unixODBC
2、安装freetds
3、安装DBD-ODBC
4、配置freetds
5、配置unixODBC
6、perl脚本测试能否成功;
四、关于本文
五、相关文档
正文
++++++++++++++++++++++++++++++++++++++++++++
一、关于测试环境及Linux连接SQL Server 的说明;
测试环境:
gcc 3.3.3 , kernel 2.6.5-1 , glibc 2.3.3-27 , perl 5.8.3
关于SQL Server说明:
MS从来没有提供过SQLServer for Linux,所以大家也不要去尝试在Linux系统安装SQLServer,但是可以通过ODBC连接Windows系统的SQLServer数据库;
Windows Server 2003用户注意:
在Windows Server 2003系统上安装的SQLServer是不会打开1433端口的,所以请Windows2003用户在安装完SQLServer之后一定装上SQLServer SP3布丁
二、下载相关软件 unixODBC、freetds和DBD-ODBC
首先需要下载3个文件:
Linux系统的ODBC
unixODBC-2.2.8.tar.gz ( http://www.unixodbc.org)
连接SQLServer或Sybase的驱动
freetds-0.62.4.tar.gz ( http://www.freetds.org)
perl的ODBC模块
DBD-ODBC-1.12.tar.gz ( http://cpan.perl.org)
把下载到的三个文件放到同一个目录
三、安装和配置;
1、安装unixODBC
# cd unixODBC-2.2.8
# ./configure --prefix=/usr/local/unixODBC
# make
# make install
2、安装freetds
# tar vxzf freetds-0.62.4.tar.gz
# cd freetds-0.62.4
# ./configure --prefix=/usr/local/freetds --with-unixodbc=/usr/local/unixODBC --with-tdsver=8.0
# make
# make install
3、安装DBD-ODBC
在安装之前要先设置一下环境变量
之后开始编译安装
# tar vxzf DBD-ODBC-1.12.tar.gz
# cd DBD-ODBC-1.12
# perl Makefile.PL
# make
# make install
所有的软件到现在都安装完成了,接下来就是配置了
4、配置freetds
# vi etc/freetds.conf
修改以下的一段,并把;去掉
改好之后的内容:
[MyServer2k]
host=192.168.0.32
port=1433
tds version=8.0
其中的[MyServer2k]代表在客户端使用的服务器名称,host代表SQLServer服务器的IP地址,port代表端口,测试连接;
# bin/tsql -S MyServer2k -H 192.168.0.32 -p 1433 -U sa -P password1> use gameDB
2> go
1> select count(*) from t_ip
4
1> quit
一切都很顺利
现在来说明以下这些参数的作用,-S MyServer2k是在freetds.conf中定义好的,-H 192.168.0.32服务器IP地址,和freetds.conf中的一致,如果使用了-S参数,这个参数可以不用,-p 1433用来指定端口是1433 ,-U sa用来指定连接数据库的用户名,-P password用来指定连接数据库的密码。
5、配置unixODBC
向ODBC添加SQLServer驱动
# vi etc/odbcinst.ini
写入如下内容:
[TDS] ;驱动名称
Description = MS-SQLServer ;描述
Driver = /usr/local/freetds/lib/libtdsodbc.so ;驱动程序
Setup = /usr/local/freetds/lib/libtds.so ;不要问我,我也不知道这是什么
FileUsage = 1
保存退出
添加DSN
# vi etc/odbc.ini
写入如下内容
[123] ;DSN名称
Driver = TDS ;ODBC驱动
Server = 192.168.0.32 ;服务器IP
Database = gameDB ;要使用的数据库
Port = 1433 ;端口
Socket =
Option =
Stmt =
保存并退出,测试ODBC的连接
# bin/isql -v 123 sa password
SQL> select count(*) from t_ip
+----------+
| |
+----------+
| 4 |
+----------+
SQL> quit
OK,测试通过,开始测试perl能否正确使用ODBC
在使用perl连接ODBC之前要做些准备工作
把ODBC的共享库都复制到/usr/lib目录
6、perl脚本测试能否成功;
内容如下
#!/usr/bin/perl
use DBI;
$dbh=DBI->connect('dbi:ODBC:123','sa','password');
my $sth=$dbh->prepare("select * from t_ip";
$sth->execute();
while (@data=$sth->fetchrow_array()){
print "$data[0] $data[1] $data[2]\n";
}
保存退出
# perl test.pl
如果可以看到数据库中的记录,就说明可以正常使用ODBC perl了。
既然已经可以实现perl通过ODBC来连接SQLServer了,那么同样可以使用PHP+ODBC+SQLServer,具体方法请查询PHP官方网站。
四、关于本文
写完,收工,今天晚上可以不用熬夜了,开心
PS:M$真是害死我了。
五、相关文档
《sqlrelay 的安装配置和应用》
By tonyvicky at 2005/12/28 - 13:22 | 数据库 | 参与评论 | 5454 阅读不能支持中文
我在suse linux下安装freetds和unixODBC的最新版本后,用freetds带的tsql可以从sql server数据表中正常取出中文字符,但是用unixODBC的isql却取出的都是以问号代替的中文字符。
这是我在freetds.conf中的设置
[MyServer2k]
host = 10.168.168.72
port = 1433
tds version = 8.0
client charset = UTF-8
我也遇到isql不能支持中文的问题
我也遇到isql不能支持中文的问题,把LANG设成zh_CN.GB18030了,但是没有用,还是全部问号啊,安装方法到底对还是不对
By Anonymous at 周三, 2006/09/13 - 23:08 | 回复freeTDS 支持中文,只不过 unixODBC 的 iSQL 跟 freeTDS
>> 用freetds带的tsql可以从sql server数据表中正常取出中文字符,但是用unixODBC的isql却取出的都是以问号代替的中文字符
我的 linux 是 Fedora Core 5,环境变量 LANG=zh_CN.UTF-8,FreeTDS是下载的 0.62 的 rpm 安装包安装的;unixODBC 是 FC5 自带的;SQLServer2000(简体中文版)是安装在另外一台简体中文Windows2000服务器的。安装、配置完后用 FreeTDS 的 tsql 访问数据库正常,汉字也能正常显示,但是用 isql 则是空字符,不是你所说的问号“??”。
[root@liuyan-fc5 etc]# export LANG=zh_CN.UTF-8 [root@liuyan-fc5 etc]# isql -v bmis_ds ly ly +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> select top 1 staffName from staff +---------------------------------------------------+ | staffName | +---------------------------------------------------+ | | +---------------------------------------------------+ SQLRowCount returns 1 1 rows fetched SQL>
后来我把 LANG 设置为 zh_CN.GB18030,再用 isql 访问,汉字才正常显示了出来。
[root@liuyan-fc5 etc]# export LANG=zh_CN.GB18030 [root@liuyan-fc5 etc]# isql -v bmis_ds ly ly +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> select top 1 staffName from staff +---------------------------------------------------+ | staffName | +---------------------------------------------------+ | 刘研 | +---------------------------------------------------+ SQLRowCount returns 1 1 rows fetched SQL>
我还没试过用其他 client 访问数据库
----刘研,2006年03月31日 下午14:30
----邮箱:lovetide@21cn.com
----QQ:12231777
用ODBC通过freetds来查询,汉字显示也正常
我用freetds的tsql查询SQLServer2k,汉字显示正常,查询条件里面有汉字,结果也很正常,还没发现什么不对的地方
用ODBC通过freetds来查询,汉字显示也正常,但是查询条件里面有汉字的时候,就得不到查询结果,无法查询汉字,就没办法做到实际的应用中去,请问该如何解决isql里面对汉字的查询呢?
By hcb at 周二, 2006/04/18 - 10:23 | 回复By Anonymous at 周五, 2005/12/30 - 08:49 | 回复
謝謝
真的感謝, 幾天的煩腦一掃空!
有一點補充, 如果你在 compile DBD::ODBC 時出現 error, 可試一下 upgrade 你的 DBI
# perl -MCPAN -e shell
> install DBI
然後再裝, 應該就可以了!! (Redhat 7.3 & Fedora 5 Tested)
By Anonymous at 周六, 2006/08/19 - 12:06 | 回复 ================================================================================== http://linux.chinaitlab.com/system/350447.html 一、关于测试环境及Linux连接SQL Server 的说明;
测试环境:
gcc 3.3.3 , kernel 2.6.5-1 , glibc 2.3.3-27 , perl 5.8.3
关于SQL Server说明:
MS从来没有提供过SQLServer for Linux,所以大家也不要去尝试在Linux系统安装SQLServer,但是可以通过ODBC连接Windows系统的SQLServer数据库;
Windows Server 2003用户注意:
在Windows Server 2003系统上安装的SQLServer是不会打开1433端口的,所以请Windows2003用户在安装完SQLServer之后一定装上SQLServer SP3布丁
二、下载相关软件 unixODBC、freetds和DBD-ODBC
首先需要下载3个文件:
Linux系统的ODBC
unixODBC-2.2.8.tar.gz ( http://www.unixodbc.org)
连接SQLServer或Sybase的驱动
freetds-0.62.4.tar.gz ( http://www.freetds.org)
perl的ODBC模块
DBD-ODBC-1.12.tar.gz ( http://cpan.perl.org)
把下载到的三个文件放到同一个目录
三、安装和配置;
1、安装unixODBC
# cd unixODBC-2.2.8
# ./configure --prefix=/usr/local/unixODBC
# make
# make install
2、安装freetds
# tar vxzf freetds-0.62.4.tar.gz
# cd freetds-0.62.4
# ./configure --prefix=/usr/local/freetds --with-unixodbc=/usr/local/unixODBC --with-tdsver=8.0
# make
# make install
3、安装DBD-ODBC
在安装之前要先设置一下环境变量
之后开始编译安装
# tar vxzf DBD-ODBC-1.12.tar.gz
# cd DBD-ODBC-1.12
# perl Makefile.PL
# make
# make install
所有的软件到现在都安装完成了,接下来就是配置了
4、配置freetds
# vi etc/freetds.conf
修改以下的一段,并把;去掉
改好之后的内容:
[MyServer2k]
host=192.168.0.32
port=1433
tds version=8.0
其中的[MyServer2k]代表在客户端使用的服务器名称,host代表SQLServer服务器的IP地址,port代表端口,测试连接;
# bin/tsql -S MyServer2k -H 192.168.0.32 -p 1433 -U sa -P password1> use gameDB
2> go
1> select count(*) from t_ip
4
1> quit
一切都很顺利
现在来说明以下这些参数的作用,-S MyServer2k是在freetds.conf中定义好的,-H 192.168.0.32服务器IP地址,和freetds.conf中的一致,如果使用了-S参数,这个参数可以不用,-p 1433用来指定端口是1433 ,-U sa用来指定连接数据库的用户名,-P password用来指定连接数据库的密码。
5、配置unixODBC
向ODBC添加SQLServer驱动
# vi etc/odbcinst.ini
写入如下内容:
[TDS] ;驱动名称
Description = MS-SQLServer ;描述
Driver = /usr/local/freetds/lib/libtdsodbc.so ;驱动程序
Setup = /usr/local/freetds/lib/libtds.so ;不要问我,我也不知道这是什么
FileUsage = 1
保存退出
添加DSN
# vi etc/odbc.ini
写入如下内容
[123] ;DSN名称
Driver = TDS ;ODBC驱动
Server = 192.168.0.32 ;服务器IP
Database = gameDB ;要使用的数据库
Port = 1433 ;端口
Socket =
Option =
Stmt =
保存并退出,测试ODBC的连接
# bin/isql -v 123 sa password
SQL> select count(*) from t_ip
+----------+
| |
+----------+
| 4 |
+----------+
SQL> quit
OK,测试通过,开始测试perl能否正确使用ODBC
在使用perl连接ODBC之前要做些准备工作
把ODBC的共享库都复制到/usr/lib目录
6、perl脚本测试能否成功;
# vi test.pl
内容如下
#!/usr/bin/perl
use DBI;
$dbh=DBI->connect('dbi:ODBC:123','sa','password');
my $sth=$dbh->prepare("select * from t_ip";
$sth->execute();
while (@data=$sth->fetchrow_array()){
print "$data[0] $data[1] $data[2]\n";
}
保存退出
# perl test.pl
如果可以看到数据库中的记录,就说明可以正常使用ODBC perl了。
既然已经可以实现perl通过ODBC来连接SQLServer了,那么同样可以使用PHP+ODBC+SQLServer,具体方法请查询PHP官方网站。