关闭

在Linux上配置unixODBC和FreeTDS访问MS SQL Server

238人阅读 评论(0) 收藏 举报
分类:

一, 安装 unixODBC

下载安装包. 在 RedHat 安装光盘上就有
unixODBC-2.2.11-1.RHEL4.1.i386.rpm
unixODBC-devel-2.2.11-1.RHEL4.1.i386.rpm
unixODBC-kde-2.2.11-1.RHEL4.1.i386.rpm

安装
rpm -Uvh unixODBC-2.2.11-1.RHEL4.1.i386.rpm
rpm -Uvh unixODBC-devel-2.2.11-1.RHEL4.1.i386.rpm
如果安装中提示有对其它安装包的依赖,则按照提示先安装
哪些包.

或者从源码安装 unixODBC
下载源码集
unixODBC-2.2.11.tar.gz
# tar xzf unixODBC-2.2.11.tar.gz
# cd unixODBC-2.2.11
# ./configure
# make
# make install

./configure 的时候也有可能提示找不到某些依赖库.
下载这些依赖库的源码,编译,安装.

rpm 安装和源码编译安装的差别在于配置文件 odbc.ini, odbcinst.ini
的位置不同. 前者为 /etc , 后者为 /usr/local/etc

二, 安装 FreeTDS

unixODBC 提供了Linux 对ODBC 的支持,但它只是一个 ODBC的管理器, 要连接实际的数据库还得提供这种数据库的 ODBC 驱动.

FreeTDS就是Linux 下 用于连接MS SQL Server 和 Sybase 的免费ODBC 驱动
注意, 必须先装 unixODBC, 再装 freetds

freetds-0.64 是目前的最新稳定版.
下载源码包 freetds-stable.tgz
# tar xzf freetds-stable.tgz
# ./configure --with-unixodbc=/usr/local --with-tdsver=8.0
# make
# su
# make install
将安装到 /usr/local 下

如果 unixODBC是源码安装, 则--with-unixodbc=/usr/local
如果 unixODBC是rpm安装, 则不需要该选项

三, 配置 unixODBC 和 FreeTDS

3.1 向unixODBC 登记 FreeTDS 驱动
    修改 /etc/odbcinst.ini (或者/usr/local/etc/odbcinst.ini)
    在文件中添加
=========================== /etc/odbcinst.ini  ======================
# Driver from FreeTDS package
# setup from FreeTDS package
[FREETDS]
Description     = ODBC of FreeTDS for MS SQL 2000
Driver          = /usr/local/lib/libtdsodbc.so
Setup           = /usr/local/lib/libtds.so
FileUsage       = 1

===================================================================

3.2  在 FreeTDS 的配置文件中添加指向具体数据库的访问信息
     修改 /usr/local/etc/freetds.conf
     在末尾添加如下内容. 该配置文件中原有的内容请仔细阅读, 是不错的教材
===================================================================
[MYSQLSERVER]
host = 192.168.0.5    ; MS SQL Server 的 IP 或者域名
port = 1433
tds version = 8.0
client charset = UTF-8  ; 客户端软件可识别的字符集.
===================================================================
注意, client charset 必需大于或等于服务端数据库使用的字符集.
例如,服务端数据库是 MS SQL Server 2000, 字符集是 GB2312.
那么 client charset 可以设置为 GB2312(等于), GB18030(大于),UTF-8(大于)但不能设为ISO-8859-1(小于), Shift_JIS(不等于).
由于 UTF-8 是所由字符集的超集,因此设置为 UTF-8 总是可行的.
此外, FreeTDS的client charset不能设置为 UTF16. 这时目前该软件设计的局限,其官方网站称,在未来版本中可能会增加对client charset UTF16的支持.

3.3  修改 /etc/odbc.ini (如果odbc是从源码安装,则 /usr/local/etc/odbc.ini)
     添加DSN.  
=========================== /etc/odbc.ini  ======================
[ODBC Data Sources]
TEST1dsn= My first Test DSN
TEST2dsn= My second Test DSN

[TEST1dsn]        ; DSN 名
Driver          = /usr/local/lib/libtdsodbc.so
Description     = My First Test DSN
Trace           = No
Servername      = MYSQLSERVER     ;在 freetds.conf中定义
Database        = MYTESTDB              ;库名

[TEST2dsn]
Driver          = /usr/local/lib/libtdsodbc.so
Description     = My Second Test DSN
Trace           = No
Server          = 192.168.0.5     ; 可以直接写数据库服务器的访问信息
Database        = MyTESTDB
Port            = 1433
TDS_Version     = 8.0


[Default]
Driver          = /usr/local/freetds/lib/libtdsodbc.so
===================================================================

注意:
用 unixODBC 通过 freeTDS 访问 MS SQL Server 有两种配置方式.

(1)一种是将服务器信息写在 freeTDS 的配置文件 $PREFIX/etc/freetds.conf 中,而 /etc/odbc.ini 中使用 Servername 来指向 freetds.conf 中设定的 DSN.
如上例中的 [TEST1dsn]
(2).另一种方式是将服务器信息也一并写在 /etc/odbc.ini 中. 如上例中的 [TEST2dsn].
注意,关键字有所不同.  例如, freetds.conf 中的 tds version 在 /etc/odbc.ini 中为 TDS_Version.

方式(2)相对简单,但只有少数几个关键字可以控制freetds,至于freetds的其它特征则使用freetds的缺省配置.

方式(1)虽然复杂一些,但对freetds可进行更细致的控制,例如可指定客户端的字符集.

推荐使用方式(1)进行配置.


四, 访问数据库:

无论是用客户端软件,还是编程访问数据库,通常要提供三个参数.
DSN, UserName, Password.
以本文示例来说,
DSN =  TEST1dsn 或 TEST2dsn
UserName = somename,
Password = somepasswd,

就意味着访问位于 192.168.0.5 的 MS SQL Server 库 MYTESTDB. 查询结果的字符集为 UTF-8.

unixODBC 提供的一个通用的 GUI 数据库连接客户端为 DataManager.


五, 关于字符集:

FreeTDS能够自动识别服务器端的charset. 因此 FreeTDS 需要用户设定客户端的charset. 这也就是客户端应用程序期待从FreeTDS获得的数据所应该使用的charset.
一旦client charset设定, FreeTDS将实现从 server charset <--> client charset的转换.

如果有两个客户应用程序都要访问同一个 MS SQLServer, 但很不幸,这两个客户程序所接受的字符集分别是 UTF-8 和 GB2312. 那么解决的办法是在FreeTDS.conf中设置两组DataSource,它们的服务器设置相同,但client charset分别设为 UTF-8和GB2312. 在 odbc.ini中也设置两组不同的DSN 分别指向这两组DataSource. 而最终两个客户程序各自使用与之相应的DSN即可.

LINUX

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

在Ubuntu 10.04中文版下Qt编程,使用unixODBC和FreeTDS连接MS SQL Server 2005,并且中文不出现乱码的方法

装载于: http://blog.renren.com/share/235081772/4016936282 回头来看,还是很简单的,但是由于自身对linux使用方面的不熟练,以及网上资料的说法不一,还是造成了一定的困扰。所以总结下,看看有没有人需要。   ...
  • w_ww_w
  • w_ww_w
  • 2014-01-10 10:09
  • 2257

QT unixODBC+freetds连接sqlserver并交叉编译移植到ARM上

最近产品需要做一个数据上传功能。客户要求直接写入SQLserver数据库。之前QT连接数据库是默认来年将诶sqlite数据库。由于sqlite是QT默认自带的操作起来比较简单,但是SQLserver QT没有带驱动所以需要安装驱动插件。下面我们来看一下是QT支持SQLServer所需要的插件。
  • lovehere33
  • lovehere33
  • 2014-11-14 14:29
  • 2953

移植freetds连接sql server教程

移植freetds连接sql server教程 一、  freetds介绍 最近工作中项目需要嵌入式linux连接sql server数据库的要求,之前对sql server完全不了解,所以加强学习,经过半年的断断续续的开发学习,下面将自己你的经验总结一下。 Freetds是一个开源...
  • zhangqing1001
  • zhangqing1001
  • 2014-10-18 10:57
  • 989

Linux平台使用Freetds连接SQL Server服务器,兼容PHP和Laravel

Linux平台 PHP和Laravel连接SQL Server
  • skykingf
  • skykingf
  • 2015-03-24 17:27
  • 5929

Linux环境PHP5.5以上连接SqlServer2008【全网最经典无错版】

linux版本:64位CentOS 6.4Nginx版本:nginx1.8.0php版本:php5.5.28Sqlserver:2008 关于Linux环境安装Nginx+PHP参考《Linux环境Nginx安装与调试以及PHP安装 》即可。 一般来说,PHP+mysql是最经典...
  • 21aspnet
  • 21aspnet
  • 2015-08-12 21:06
  • 16099

Linux下FreeTDS使用及问题总结

本人Linux版本: RHEL5.8 (32位) 源码安装包(设计开发使用Freetds建议选择源码编译、安装生成与自己系统适配的相关库文件): Freetds源码安装包地址 编码使用相关参考: Linux c使用Freetds连接SQLServer 主要说下个人使用的时候遇到的几...
  • geqiandebei
  • geqiandebei
  • 2016-01-19 10:12
  • 2914

MS SQL Server 数据类型详解

本文转载自:http://blog.csdn.net/iamduoluo/article/details/6329199
  • xjh2011xjh
  • xjh2011xjh
  • 2014-05-13 20:47
  • 1004

Linux下使用C/C++访问数据库——SQL Server篇

转载自 commandos 的BLOG:http://commandos.blog.51cto.com/154976/136829/   在Linux下连接MSSQL是一件很痛苦的事,因为微软同志没有提供任何接口给开发人员,大约他们认为要用MSSQL的,只可能是w...
  • xingxu0207
  • xingxu0207
  • 2017-07-12 16:35
  • 435

如何在Linux上安装和使用MS SQL Server

今年早些时候,微软宣布他们的将MS SQL Server运行在Linux上的计划震惊了IT界。在Satya Nadella的领导下,微软这个雷德蒙德的巨头在Linux主导的产业(如快速推动云的技术)方面取得了显著进展。使SQL Server可以在Linux环境下运行,是这种进程的另一个标志性的举动。
  • cdshrewd
  • cdshrewd
  • 2016-11-28 23:16
  • 5978

MS SQL Server 存储过程学习(2)数据库存储过程详解

MS SQL Server 存储过程详解  存储过程的优缺点   ◆优点:   执行速度更快。存储过程只在创造时进行编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程执行速度更快。   存储过程用于处理复杂的操作时,程序的可读性更强、网络的负担更小。   使用存储过程封...
  • szzhuyike
  • szzhuyike
  • 2013-02-06 15:48
  • 1355
    个人资料
    • 访问:39472次
    • 积分:684
    • 等级:
    • 排名:千里之外
    • 原创:28篇
    • 转载:6篇
    • 译文:0篇
    • 评论:1条
    文章分类