什么是unixODBC:
ODBC(Open Database Connect)是由Microsoft 公司於1991 年提出的一個開放的,用於訪問數據庫的統一接口規范。
unixODBC的是為非Window平台的系統實現ODBC規范接口的中間件。
unixODBC的安裝
有GUI的用戶可以使用ODBCConfig tool 安裝。教程在官網文檔有詳細介紹,不再贅述。地址:http://www.unixodbc.org/doc/UserManual/
以下介紹沒有GUI界面的安裝說明,同樣也是來自官方文檔,地址:http://www.unixodbc.org/odbcinst.html
我通過 apt-get install unixODBC 進行安裝,安裝完成后對odbcinst.ini和odbc.ini文件進行配置修改。
自己編譯或自己解壓安裝的需要自行摸索,安裝完成后對odbcinst.ini和odbc.ini文件的修改是一致的。
為了更清楚了解配置的過程,需要先了解一些背景信息:
什么是ini文件:
ODBC首次出現在Window 3.0中。當時Windows使用.ini文件去包含配置信息。
ini文件的文本格式為:
[section1]
entry1 = value
entry2 = value
[section2]
entry1 = value
entry2 = value
...
雖然后來Windows NT將這些ini文件替換成了注冊表的形式,但是ODBC中用於訪問這些配置信息的API仍然保持不變。
unixODBC仍然保留了用ini存儲配置信息的習慣。
系統 vs 用戶
ODBC會區分兩種類型的ini文件。
系統ini文件能被所有用戶訪問,但是不能修改;用戶ini文件則是針對特定用戶的,並且能被該特定用戶修改。
ODBC的系統文件是odbcinst.ini和odbc.ini。用戶文件是~/.odbc.ini(注意開頭.號),並包含在各自用戶的home目錄下。
系統文件odbcinst.ini包含對所有用戶可訪問的ODBC驅動信息;odbc.ini文件包含所有用戶可訪問的DSN信息。這些'系統DSN'對於如web服務器這樣,不以真實用戶身份運行的應用十分有用,因為這些程序不會有自己的home目錄來存放.odbc.ini文件。
舉一個含ODBC支持的Apache和PHP的例子。當http server第一次啟動時,它通過root調用SQLAllocEnv。然后它再切換到指定用戶去調用SQLConnect。此時如果DSN不是一個系統DSN,就會出現fails。
FILEDSN
ODBC 3 還有第三種類型的DSN, file DSN。目前unixODBC還不支持FILEDSN。略。
文件路徑
odbcinst.ini和odbc.ini文件默認放在/usr/local/etc下面。但由於現在能通過指定配置腳本的prefix來指定文件路徑,所以如果在configure的時候指定的了prefix,則文件路徑在{prefix}/etc下面
文件內容
odbcinst.ini
以下是一個示例:
[PostgreSQL] Description = PostgreSQL driver for Linux & Win32 Driver = /usr/local/lib/libodbcpsql.so Setup = /usr/local/lib/libodbcpsqlS.so FileUsage = 1
[PostgreSQL]是driver的名字,這里表明這是一個PostgreSQL driver。
Driver 和Setup路徑指出ODBC driver和setup libs 的位置。
當我們使用ODBCConfig工具添加新的DSN時,會調用這個setup lib。但是由於現在我們是非GUI安裝,所以其實可以不用管他。
Driver路徑最為關鍵。當DSN調用SQLConnect或SQLDriverConnect時,driver manager會動態載入這些庫。若這里指定到了錯誤的Driver,則DSN無法工作。
FileUsage由odbcinst 命令自己添加,所以如果你使用的是文本編輯器,則需要自己添加。
Threads
由於1.6版本之后添加了多線程支持,所以如果driver manager構建了多線程支持,則可以配置:
[PostgreSQL] Description = PostgreSQL driver for Linux & Win32 Driver = /usr/local/lib/libodbcpsql.so Setup = /usr/local/lib/libodbcpsqlS.so
Threading = 2
這項配置改變了默認的線程序列化等級(thread serialization level).
[.]odbc.ini
odbc.ini的內容要復雜一些,主要是因為不同的driver需要不同的配置項。
最后列出了支持所有driver的配置項,以供參考。這些配置項可以通過odbcinst命令,或文本編輯器來添加。
對應上面例子中的driver的配置項:
[PostgreSQL] Description = Test to Postgres Driver = PostgreSQL Trace = Yes TraceFile = sql.log Database = nick Servername = localhost UserName = Password = Port = 5432 Protocol = 6.4 ReadOnly = No RowVersioning = No ShowSystemTables = No ShowOidColumn = No FakeOidIndex = No ConnSettings =
Driver項用於匹配odbcinst.ini的[section]部分。不過也可以直接指向driver路徑,只是可能需要注意路徑訪問權限的問題。
其他數據庫的配置項例子:
Templates
The templates for the included drivers are...
Postgress
[PostgreSQL] Description = Test to Postgres Driver = PostgreSQL Trace = Yes TraceFile = sql.log Database = nick Servername = localhost UserName = Password = Port = 5432 Protocol = 6.4 ReadOnly = No RowVersioning = No ShowSystemTables = No ShowOidColumn = No FakeOidIndex = No ConnSettings =
Mini SQL
[Mini SQL] Description = MiniSQL Driver = MiniSQL Trace = No TraceFile = Host = localhost Database = ConfigFile =
MySQL
[MySQL-test] Description = MySQL test database Trace = Off TraceFile = stderr Driver = MySQL SERVER = 192.168.1.26 USER = pharvey PASSWORD = PORT = 3306 DATABASE = test
NNTP driver
[nntp Data Source] Description = nntp Driver Driver = nntp Driver Trace = No TraceFile = Host = localhost Database = Port =
FreeTDS driver
Driver = TDS Description = Northwind sample database Trace = No Server = 192.168.1.25 Database = Northwind UID = sa
Sybase SQL Anywhere 5.0
Thanks Greg.
[Sybase SQL Anywhere 5.0] Driver=Sybase SQL Anywhere 5.0 Description=Sybase SQL Anywhere 5.0 ODBC Driver Userid=dba Password=sql DatabaseFile=sademo.db