一, 安裝 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