### 第26章:連接器
在本章中,介紹了MySQL連接器,所謂連接器,是為客戶端程序提供與MySQL服務器連接性的驅動程序。
### 26.1.?MySQL Connector/ODBC
[26.1.1. MyODBC介紹](#)[ 26.1.2. 關于ODBC和MyODBC的一般信息](#)[ 26.1.3. 如何安裝MyODBC](#)[ 26.1.4. 在Windows平臺上從二進制版本安裝MyODBC](#)[ 26.1.5. I在Unix平臺上從二進制版本安裝MyODBC ](#)[ 26.1.6. 在Windows平臺上從源碼版本安裝MyODBC](#)[ 26.1.7. 在Unix平臺上從源碼版本安裝MyODBC ](#)[ 26.1.8. 從BitKeeper開發源碼樹安裝MyODBC](#)[ 26.1.9. MyODBC配置](#)[ 26.1.10. 與MyODBC連接相關的事宜](#)[ 26.1.11. MyODBC和Microsoft Access](#)[ 26.1.12. MyODBC和Microsoft VBA及ASP](#)[ 26.1.13. MyODBC和第三方ODBC工具](#)[ 26.1.14. MyODBC通用功能](#)[ 26.1.15. 基本的MyODBC應用步驟](#)[ 26.1.16. MyODBC API引用](#)[ 26.1.17. MyODBC數據類型](#)[ 26.1.18. MyODBC錯誤代碼](#)[ 26.1.19. MyODBC與VB:ADO、DAO和RDO](#)[ 26.1.20. MyODBC與Microsoft.NET](#)[ 26.1.21. 感謝](#)
通過MySQL Connector/ODBC(MyODBC驅動程序系列),MySQL為ODBC提供了支持。這是針對MyODBC驅動程序中Connector/ODBC產品系列的參考,它提供了對MySQL數據庫系統的ODBC 3.5x兼容訪問。介紹了安裝MyODBC和使用MyODBC的方式。此外,在本章中還介紹了能夠與MyODBC一起工作的公用程序信息,并回答了一些關于MyODBC的常見問題。
本參考適用于MyODBC 3.51。對于相應的版本,你可以找到舊的二進制版或源碼版MyODBC手冊。
這是關于MySQL ODBC驅動程序的參考手冊,而不是通用ODBC參考。關于ODBC的更多信息,請參閱[http://www.microsoft.com/data/](http://www.microsoft.com/data/)。
對于本參考的應用程序開發部分,假定用戶在C語言方面有著良好的實踐知識,對DBMS有一般了解,最后,還應熟悉MySQL。關于MySQL功能及其語法的更多信息,請參閱[http://dev.mysql.com/doc/](http://dev.mysql.com/doc/)。
如果你的問題未能在本文檔中得到解答,請發送電子郵件至[myodbc@lists.mysql.com](#)。
### 26.1.1.?MyODBC介紹
[ 26.1.1.1. 什么是ODBC?](#)[ 26.1.1.2. 什么是Connector/ODBC?](#)[ 26.1.1.3. 什么是MyODBC 2.50?](#)[ 26.1.1.4. 什么是MyODBC 2.50?](#)[ 26.1.1.5. 從哪獲取MyODBC](#)[ 26.1.1.6. 支持的平臺](#)[26.1.1.7. MyODBC郵件列表](#)[26.1.1.8. MyODBC論壇](#)[ 26.1.1.9. 如何通報MyODBC問題或缺陷](#)[ 26.1.1.10. 如何提交MyODBC補丁](#)
#### 26.1.1.1.?什么是ODBC?
ODBC(開放式數據庫連接性)為客戶端程序提供了訪問眾多數據庫或數據源的一種方式。ODBC是標準化的API,允許與SQL數據庫服務器進行連接。它是根據SQL Access Group的規范開發的,它定義了一套函數調用、錯誤代碼和數據類型,可將其用于開發獨立于數據庫的應用程序。通常情況下,當需要數據庫獨立或需要同時訪問不同的數據源時,將用到ODBC。
關于ODBC的更多信息,請參閱[http://www.microsoft.com/data/](http://www.microsoft.com/data/)。
#### 26.1.1.2.?什么是Connector/ODBC?
Connector/ODBC是描述MySQL ODBC驅動程序MySQL AB產品系列的名稱。它們也稱為MyODBC驅動程序。
#### 26.1.1.3.?什么是MyODBC 2.50?
MyODBC 2.50是MySQL AB的32位ODBC驅動程序,它基于ODBC 2.50規范層次0(具有層次1和層次2的特性)。這是開放源碼市場最流行的ODBC驅動程序之一,很多用戶都使用它來訪問MySQL提供的功能。
#### 26.1.1.4.?什么是MyODBC 2.50?
MyODBC 3.51是一種32位ODBC驅動程序,也稱為MySQL ODBC 3.51驅動程序。與已有的MyODBC 2.50驅動程序相比,該版本有所增強。它支持ODBC 3.5x規范層次1(全部核心API +層次2特性),以便能夠為訪問MySQL提供所有的ODBC功能。
#### 26.1.1.5.?從哪獲取MyODBC
MySQL AB依GPL(通用公共許可)發布其所有產品。你可以從MySQL AB的網站獲取最新的MyODBC二進制版和源碼版:[http://dev.mysql.com/downloads/](http://dev.mysql.com/downloads/)。
關于MyODBC的更多信息,請訪問[http://www.mysql.com/products/myodbc/](http://www.mysql.com/products/myodbc/)。
關于許可的更多信息,請訪問[http://www.mysql.com/company/legal/licensing/](http://www.mysql.com/company/legal/licensing/)。
#### 26.1.1.6.?支持的平臺
MyODBC可用于MySQL支持的所有主要平臺,如:
·???????? Windows 95, 98, Me, NT, 2000, XP和2003
·???????? 所有Unix操作系統
o??????? AIX
o??????? Amiga
o??????? BSDI
o??????? DEC
o??????? FreeBSD
o??????? HP-UX 10, 11
o??????? Linux
o??????? Mac OS X Server
o??????? Mac OS X
o??????? NetBSD
o??????? OpenBSD
o??????? OS/2
o??????? SGI Irix
o??????? Solaris
o??????? SunOS
o??????? SCO OpenServer
o??????? SCO UnixWare
o??????? Tru64 Unix
對于特定平臺,如果無法下載二進制版本,可通過下載驅動程序源碼自行創建驅動程序。你也可以為MySQL貢獻二進制代碼,方式是發送郵件至[myodbc@lists.mysql.com](#),這樣其他用戶就能使用你貢獻的內容。
#### 26.1.1.7.?MyODBC郵件列表
MySQL AB通過其郵件列表為用戶社區提供幫助。對于與MyODBC有關的事宜,可使用[myodbc@lists.mysql.com](#)郵件列表,從有經驗的用戶處獲得幫助。
關于訂閱MySQL郵件列表或瀏覽列表檔案的更多信息,請訪問[http://lists.mysql.com/](http://lists.mysql.com/)。
其中,關注程度最高的是論壇MySQL連接器部分的ODBC論壇。
#### 26.1.1.8.?MyODBC論壇
通過MySQL論壇(位于[http://forums.mysql.com](http://forums.mysql.com)),可獲得有經驗用戶的支持和幫助。
#### 26.1.1.9.?如何通報MyODBC問題或缺陷
如果遇到與MyODBC有關的困難或問題,首先應使用ODBC管理器和MyODBC生成一份日志文件(請求來自ODBC ADMIN的日志時獲得的日志文件)。關于完成該步驟的方式,請參見[26.1.9.7節,“獲取ODBC跟蹤文件”](# "26.1.9.7.?Getting an ODBC Trace File")。
檢查MyODBC跟蹤文件,找出可能出錯的地方。通過在myodbc.log文件中搜索字符串“>mysql_real_query”,可確定已執行的語句。
此外,你還應嘗試從**mysql**客戶端程序或admndemo執行語句。這樣,就能幫助你確定錯誤的出處,MyODBC或MySQL。
如果你發現了不正確的事項,請將相關行(最多40行)發送給MyODBC郵件列表。請參見[1.7.1.1節,“MySQL郵件列表”](# "1.7.1.1.?The MySQL Mailing Lists")。請勿發送整個MyODBC或ODBC日志文件!
如果你無法找出錯誤之所在,最后的選擇是,以tar或zip格式創建包含MyODBC跟蹤文件、ODBC日志文件和README文件(闡明問題)的檔案。你可以將該檔案文件發送至[ftp://ftp.mysql.com/pub/mysql/upload/](#)。只有位于MySQL AB的我們才能訪問你上傳的文件,而且我們會十分謹慎地對待這類數據。
如果你創建了仍出現問題的程序,請將該程序也包含在檔案文件中。
如果程序能夠與某些其他SQL服務器一起工作,檔案中還應包含在這類其他SQL服務器下工作的ODBC日志文件。
請記住,你提供給我們的信息越多,我們更正問題的機會就越大。
#### 26.1.1.10.?如何提交MyODBC補丁
你可以通過電子郵件,就已有代碼或問題發送補丁或提出更好的解決方案:[myodbc@lists.mysql.com](#)。
### 26.1.2.?關于ODBC和MyODBC的一般信息
[ 26.1.2.1. ODBC介紹](#)[26.1.2.2. MyODBC體系結構](#)[ 26.1.2.3. ODBC驅動管理器](#)[ 26.1.2.4. MySQL ODBC驅動程序的類型](#)
#### 26.1.2.1.?ODBC介紹
開放式數據庫連接性(ODBC)是廣泛接受的用于數據庫訪問的應用程序編程接口(API)。它基于針對數據庫API的CLI(調用層接口)規范(來自X/Open和ISO/IEC),并采用了結構化查詢語言(SQL)作為其數據庫訪問語言。
在[26.1.16節,“MyODBC API引用”](# "26.1.16.?MyODBC API Reference")中,概要介紹了MyODBC支持的ODBC功能。關于ODBC的更多信息,請參閱[http://www.microsoft.com/data/](http://www.microsoft.com/data/)。
#### 26.1.2.2.?MyODBC體系結構
MyODBC體系結構建立在5個組件上,如下圖所示:

·???????? **應用程序:**
應用程序指的是通過調用ODBC API來訪問MySQL服務器上數據的程序。應用程序使用標準的ODBC調用與驅動管理器進行通信。應用程序不關心數據的存儲位置,存儲方式,甚至不關心為訪問數據而進行的系統配置方式。它僅需要知道數據源名(DSN)。
對于所有的應用程序,無論它們使用OBDC的方式是什么,很多任務是共同的。這些任務包括:
o??????? 選擇MySQL服務器,并與之連接。
o??????? 提交將要執行的SQL語句。
o??????? 檢索結果(如果有的話)。
o??????? 處理錯誤。
o??????? 提交或回滾包含SQL語句的事務。
o??????? 斷開與MySQL服務器的連接。
由于大多數數據訪問工作是使用SQL完成,對于使用OBDC的應用程序來說,其主要任務是提交SQL語句,并檢索由這些語句生成的結果。
·???????? **驅動管理器:**
驅動管理器是用于管理應用程序和驅動程序間通信的庫。它負責執行下述任務:
o??????? 解析數據源名(DSN)。
o??????? 加載和卸載驅動程序。
o??????? 處理ODBC調用,或將其傳遞給驅動程序。
·???????? **MyODBC驅動程序:**
MyODBC驅動程序是用于實施ODBC API所提供功能的庫。它負責處理ODBC函數調用,將SQL請求提交給MySQL服務器,并將結果返回給應用程序。如有必要,驅動程序會更改應用程序的請求,以便該請求符合MySQL支持的語法。
·???????? **ODBC.INI:**
ODBC.INI是ODBC配置文件,其中保存了連接到服務器所需的驅動信息和數據庫信息。驅動管理器將使用它來確定加載哪個驅動程序(使用數據源名)。驅動程序將根據指定的DSN使用它來讀取連接參數。更多信息,請參見[26.1.9節,“MyODBC配置”](# "26.1.9.?MyODBC Configuration")。
·???????? **MySQL服務器:**
MySQL服務器是數據源。MySQL是:
o??????? 一種數據庫管理系統(DBMS)
o??????? 一種關聯數據庫管理系統(RDBMS)
o??????? 開放源碼軟件
#### 26.1.2.3.?ODBC驅動管理器
ODBC驅動管理器是用于管理ODBC應用程序和驅動程序間通信的庫。其主要功能包括:
·???????? 解析數據源名(DSN)。
·???????? 加載和卸載驅動程序。
·???????? 處理ODBC函數調用,或將其傳遞給驅動程序。
下面給出了一些常用的驅動程序:
·???????? Microsoft Windows ODBC驅動管理器(odbc32.dll),[http://www.microsoft.com/data/](http://www.microsoft.com/data/)
·???????? unixODBC Unix驅動管理器(libodbc.so),[http://www.unixodbc.org](http://www.unixodbc.org)。
·???????? iODBC ODBC Unix驅動管理器(libiodbc.so),[http://www.iodbc.org](http://www.iodbc.org)。
從2.1.2版開始,UnixODBC也提供MyODBC 3.51。
#### 26.1.2.4.?MySQL ODBC驅動程序的類型
MySQL AB支持兩種通過ODBC API訪問MySQL功能的開放源碼ODBC驅動程序: MyODBC (MyODBC 2.50)和MySQL ODBC 3.51驅動(MyODBC 3.51)。
注釋: 從本節起,我們將這兩類驅動程序統稱為MyODBC。但當存在差異時,我們將使用它們的本名。
### 26.1.3.?如何安裝MyODBC
MyODBC能夠工作在Windows 9x, Me, NT, 2000, XP和2003,以及大多數Unix平臺上。
MyODBC是開放源碼軟件。你可以在網站[http://dev.mysql.com/downloads/connector/odbc/](http://dev.mysql.com/downloads/connector/odbc/)上找到它的最新版本。請注意,2.50.x版采用的是LGPL許可,而3.51.x版采用的是GPL許可。
如果使用MyODBC時出現了問題,而且你的程序還能與OLEDB一起工作,應嘗試使用OLEDB驅動程序。
正常情況下,在Windows機器上僅需安裝MyODBC。僅當你擁有運行在Unix機器上的程序(如ColdFusion),而且該程序將使用ODBC來訪問數據庫時,才需安裝用于Unix的MyODBC。
如果你打算在Unix機器上安裝MyODBC,還需要1個ODBC管理器。MyODBC能夠與大多數Unix ODBC管理器一起工作。
·???????? 要想使用ODBC應用程序(不支持MySQL的應用程序),建立從Windows平臺到Unix平臺的連接,首先必須在Windows機器上安裝MyODBC。
·???????? 用戶和Windows機器必須具有訪問位于Unix機器上的MySQL服務器的權限。這可通過GRANT命令設置。請參見[13.5.1.3節,“GRANT和REVOKE語法”](# "13.5.1.3.?GRANT and REVOKE Syntax")。
·???????? 必須創建ODBC DSN條目,方式如下:
1.??? 打開Windows機器上的控制面板。
2.??? 雙擊ODBC數據源32位圖標。
3.??? 點擊選項卡“用戶DSN”。
4.??? 點擊“添加”按鈕。
5.??? 在“創建新數據源”屏幕上選擇MySQL,并點擊“完成”按鈕。
6.??? 顯示MySQL驅動程序的默認配置屏幕。請參見[26.1.9.2節,“在Windows上配置MyODBC DSN”](# "26.1.9.2.?Configuring a MyODBC DSN on Windows")。
·???????? 啟動應用程序,并使用在ODBC管理器中指定的DSN選擇ODBC驅動程序。
注意,在MySQL屏幕上還顯示了其他選項,如果遇到問題,可嘗試這些選項(如跟蹤、連接時不提示等)。
### 26.1.4.?在Windows平臺上從二進制版本安裝MyODBC
要想在Windows平臺上安裝MyODBC,應從下述站點下載恰當的分發文件,[http://dev.mysql.com/downloads/connector/odbc/](http://dev.mysql.com/downloads/connector/odbc/),解壓該文件,并執行**MyODBC-****_VERSION_****.exe**文件。
在Windows平臺上,安裝較舊的MyODBC 2.50驅動時,可能會遇到下述錯誤:
拷貝C:\WINDOWS\SYSTEM\MFC30.DLL時出現錯誤。
?
重啟Windows,并再次安裝(在運行任何使用ODBC的應用程序之前)。
問題在于其他程序正使用ODBC。由于Windows的設計方式,在這種情況下,你可能無法使用Microsoft的ODBC設置程序安裝新的ODBC驅動。在大多數情況下,可以通過連續按“忽略”鍵拷貝剩余的MyODBC文件,最終安裝應仍能工作。如不然,解決方案是在“安全模式”下重新啟動計算機。在重啟的過程中,在機器啟動Windows前按F8,選擇“安全模式”,安裝MyODBC,然后在正常模式下重新啟動計算機。
26.1.5.?I在Unix平臺上從二進制版本安裝MyODBC
26.1.5.1. 從RPM分發版安裝MyODBC
26.1.5.2. 從二進制Tarball分發版安裝MyODBC
26.1.5.1.?從RPM分發版安裝MyODBC
要想使用RPM分發版在Linux平臺上安裝或升級MyODBC,可簡單地下載最新MyODBC的RPM分發版,并按照下面介紹的方式操作。使用su
root成為根用戶,然后安裝RPM文件。
如果是首次安裝:
shell> su root
shell> rpm -ivh MyODBC-3.51.01.i386-1.rpm
如果驅動程序已存在,可按照下述方式升級它:
shell> su root
shell> rpm -Uvh MyODBC-3.51.01.i386-1.rpm
如果存在關于MySQL客戶端庫libmysqlclient的任何依存錯誤,可使用“-nodeps”選項簡單地忽略它,然后確保MySQL客戶端共享庫位于路徑中或通過LD_LIBRARY_PATH進行了設置。
這樣,就會將驅動程序庫和相關文件分別安裝到/usr/local/lib和/usr/share/doc/MyODBC目錄下。請轉至[26.1.9.3節,“在Unix平臺上配置MyODBC DSN”](# "26.1.9.3.?Configuring a MyODBC DSN on Unix")。
要想卸載驅動程序,請首先成為根用戶,然后執行**rpm**命令:
shell> su root
shell> rpm -e MyODBC
#### 26.1.5.2.?從二進制Tarball分發版安裝MyODBC
要想從tarball分發版(.tar.gz文件)安裝驅動程序,請下載針對你所使用操作系統的最新版驅動程序,然后按照下述步驟操作:
shell> su root
shell> gunzip MyODBC-3.51.01-i686-pc-linux.tar.gz
shell> tar xvf MyODBC-3.51.01-i686-pc-linux.tar
shell> cd MyODBC-3.51.01-i686-pc-linux
請閱讀INSTALL-BINARY文件中的安裝說明,并執行下述命令:
shell> cp libmyodbc* /usr/local/lib
shell> cp odbc.ini /usr/local/etc
shell> export ODBCINI=/usr/local/etc/odbc.ini
然后,請跳至[26.1.9.3節,“在Unix平臺上配置MyODBC DSN”](# "26.1.9.3.?Configuring a MyODBC DSN on Unix")為MyODBC配置DSN。更多信息,請參見與發布版一起提供的INSTALL-BINARY文件。
### 26.1.6.?在Windows平臺上從源碼版本安裝MyODBC
[ 26.1.6.1. 要求](#)[ 26.1.6.2. 構建MyODBC 3.51](#)[ 26.1.6.3. 測試](#)[ 26.1.6.4. 構建MyODBC 2.50](#)
#### 26.1.6.1.?要求
·???????? MDAC, Microsoft Data Access SDK:[http://www.microsoft.com/data/](http://www.microsoft.com/data/)。
·???????? MySQL客戶端庫以及MySQL 4.0.0或更高版本的包含文件。(最好是MySQL 4.0.16或更高版本)。應滿足上述要求,這是因為MyODBC需要用到該版本以上的庫才提供的新調用和結構。要想獲得客戶端庫和包含文件,請訪問[http://dev.mysql.com/downloads/](http://dev.mysql.com/downloads/)。
#### 26.1.6.2.?構建MyODBC 3.51
MyODBC 3.51源碼分發版包括使用**nmake**的Makefiles。在分發版中,你可以找到用于創建發布版的Makefile,以及用于創建驅動庫和DLL調試版的Makefile_debug。
要想創建驅動程序,請采取下述步驟:
1.??? 下載并將源碼展開到文件夾,然后將位置切換到該文件夾。在下述命令中,假定文件夾為myodbc3-src:
2.?????????? C:\> cd myodbc3-src
3.??? 編輯Makefile,為MySQL客戶端庫和頭文件指定正確的路徑。然后使用下述命令創建并安裝發布版。
4.?????????? C:\> nmake -f Makefile
5.?????????? C:\> nmake -f Makefile install
**nmake -f Makefile**用于創建驅動程序的發布版并將二進制碼放入名為Release的子目錄下。
**nmake -f Makefile install**用于將驅動程序DLL和庫(myodbc3.dll, myodbc3.lib)安裝(拷貝)到系統目錄下。
6.??? 要想創建調試版,請使用Makefile_Debug而不是Makefile,如下所示:
7.?????????? C:\> nmake -f Makefile_debug
8.?????????? C:\> nmake -f Makefile_debug install
9.??? 使用下述命令,可清除并重新創建驅動程序:
10.?????? C:\> nmake -f Makefile clean
11.?????? C:\> nmake -f Makefile install
注釋:
·???????? 確保在Makefiles中指定了正確的MySQL客戶端庫和頭文件路徑(設置MYSQL_LIB_PATH和MYSQL_INCLUDE_PATH變量)。默認的頭文件路徑是C:\mysql\include。對于發布版DLL,默認的庫路徑是C:\mysql\lib\opt,對于調試版,默認路徑是C:\mysql\lib\debug。
·???????? 關于**nmake**的完整用法,請參見[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vcce4/html/evgrfRunningNMAKE.asp](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vcce4/html/evgrfRunningNMAKE.asp)。
·???????? 如果你正在使用BitKeeper樹來進行編譯,所有的針對Windows的Makefiles均將被命名為Win_Makefile*。
#### 26.1.6.3.?測試
將驅動程序庫拷貝/安裝到系統目錄后,可使用示例子目錄下提供的示例測試這些庫是否已正確創建: C:\> cd samples
C:\> nmake -f Makefile all
#### 26.1.6.4.?構建MyODBC 2.50
MyODBC 2.50源碼分發版包含VC工作空間文件。通過在Microsoft Visual Studio 6.0中加載這些文件(.dsp和.dsw),可使用它們直接創建驅動程序。
### 26.1.7.?在Unix平臺上從源碼版本安裝MyODBC
[ 26.1.7.1. 要求](#)[ 26.1.7.2. 典型配置選項****](#)[ 26.1.7.3. 線程安全客戶端](#)[ 26.1.7.4. 共享或靜態選項](#)[ 26.1.7.5. 啟用調試信息](#)[ 26.1.7.6. 允許文檔功能](#)[ 26.1.7.7. 創建和編譯](#)[ 26.1.7.8. 創建共享庫](#)[ 26.1.7.9. 安裝驅動庫](#)[26.1.7.10. 在Unix平臺上測試MyODBC](#)[ 26.1.7.11. Mac OS X注意事項](#)[ 26.1.7.12. HP-UX注意事項](#)[ 26.1.7.13. AIX注意事項](#)
#### 26.1.7.1.?要求
·???????? MySQL客戶端庫以及MySQL 4.0.0或更高版本的包含文件。(最好是MySQL 4.0.16或更高版本)。應滿足上述要求,這是因為MyODBC需要用到該版本以上的庫才提供的新調用和結構。要想獲得客戶端庫和包含文件,請訪問[http://dev.mysql.com/downloads/](http://dev.mysql.com/downloads/)。
·???????? 必須使用“--enable-thread-safe-client”選項配置MySQL庫。Libmysqlclient是作為共享庫安裝的。
·???????? 必須安裝下述Unix ODBC驅動管理器之一:
o??????? iodbc 3.0或更高版本([http://www.iodbc.org](http://www.iodbc.org))
o??????? unixodbc Alpha 3或更高版本([http://www.unixodbc.org](http://www.unixodbc.org))
·???????? 如果使用了未編譯在MySQL客戶端庫中的字符集(默認字符集為: latin1 big5 czech euc_kr gb2312 gbk sjis tis620 ujis),就需要從字符集目錄下將mysql字符定義安裝到_SHAREDIR_中(默認情況下位于/usr/local/mysql/share/mysql/charsets)。如果在相同機器上安裝了MySQL,它們應位于恰當位置。
一旦完成了所有所需文件的安裝,將源碼文件解包到單獨目錄下,并按照下面給出的說明進行操作。
#### 26.1.7.2.?典型配置選項****
使用**configure**腳本,能夠對你所創建MyODBC的配置方式進行多種控制。典型情況下,可在“**configure**”命令行使用選項完成該配置操作。也可以使用環境變量來影響配置。要想了解“**configure**”命令支持的選項列表和環境變量,可運行下述命令: shell> ./configure --help
下面介紹了一些常用的“**configure**”選項。
1.??? 要想編譯MyODBC,須使用“--with-mysql-path=_DIR_”選項來提供MySQL客戶端庫文件和包含文件路徑,其中,“_DIR_”是MySQL的安裝目錄。
可通過運行“_DIR_/bin/mysql_config”來確定MySQL編譯選項。
2.??? 為ODBC驅動管理器(iodbc或unixobc)提供標準的頭文件和庫文件路徑。
·???????? 如果你正在使用iodbc,而且iodbc未安裝在其默認位置(/usr/local),可能需要使用“--with-iodbc=_DIR_”選項,其中,“_DIR_”是iodbc的安裝目錄。
如果iodbc頭文件未位于_DIR_/include目錄下,可使用“--with-iodbc-includes=_INCDIR_”選項指定它們的位置。
上面所述也適用于庫文件。如果庫文件未位于_DIR_/lib目錄下,可使用“--with-iodbc-libs=_LIBDIR_”選項。
·???????? 如果你正在使用unixODBC,可使用“--with-unixODBC=_DIR_”選項(區分大小寫),讓**configure**尋找unixODBC而不是默認的iodbc,其中,“_DIR_”是unixODBC的安裝目錄。
如果unixODBC頭文件和庫文件未位于目錄_DIR_/include和_DIR_/lib下,可使用“--with-unixODBC-includes=_INCDIR_”和“--with-unixODBC-libs=_LIBDIR_”選項。
3.??? 或許你也希望指定不同于“/usr/local”的安裝前綴。例如,要想將MyODBC驅動安裝到“/usr/local/odbc/lib”目錄下,可使用“--prefix=/usr/local/odbc”選項。
最終的配置命令應與下面給出的相似:
shell> ./configure --prefix=/usr/local \
?????? ??--with-iodbc=/usr/local \
???????? --with-mysql-path=/usr/local/mysql
#### 26.1.7.3.?線程安全客戶端
為了將驅動程序與MySQL線程安全客戶端庫libmysqlclient_r.so或libmysqlclient_r.a鏈接起來,必須指定下述**configure**選項: --enable-thread-safe
也可以使用下述選項禁止它:
--disable-thread-safe
使用該選項,能夠通過mysql線程安全客戶端庫libmysqlclient_r.so(擴展名與操作系統有關)的鏈接,創建驅動程序線程安全庫libmyodbc3_r.so。
在配置線程安全選項時,如果出現了配置錯誤,應檢查config.log,檢查錯誤是否是因系統中缺少線程庫而導致的,如果是,使用LIBS選項提供一個,即
LIBS="-lpthread" ./configure ..
#### 26.1.7.4.?共享或靜態選項
可以使用下述選項啟用或禁止共享和靜態選項:
--enable-shared[=yes/no]
--disable-shared
--enable-static[=yes/no]
--disable-static
#### 26.1.7.5.?啟用調試信息
默認情況下,所有的二進制分發版均會被創建為非調試版(采用“--without-debug”進行配置)。
要想啟用調試信息,請使用源碼分發版創建驅動程序,并在運行“**configure**”時使用“--with-debug”選項。
#### 26.1.7.6.?允許文檔功能
該選項僅能用于BK克隆樹,而不是一般的源碼分發版。
默認情況下,驅動程序是使用“--without-docs”創建的。如果希望在正常創建過程中觀察文檔信息,可使用下述選項進行配置:
--with-docs
#### 26.1.7.7.?創建和編譯
要想創建驅動程序庫,僅需執行“**make**”,該命令能完成所有事項。 shell> make
如果出現錯誤,更正后,繼續執行創建進程。如果無法創建,請發送詳細的電子郵件至[myodbc@lists.mysql.com](#),以獲取進一步幫助。
#### 26.1.7.8.?創建共享庫
在大多數平臺上,默認情況下,MySQL不會創建或支持“.so”(共享)客戶端庫,這是因為,創建共享庫在過去造成過很多問題。
在這種情況下,你可以下載MySQL分發版,并使用以下選項進行配置:
--without-server --enable-shared
要想創建共享驅動程序庫,必須為“**configure**”指定“--enable-shared”選項。默認情況下,“**configure**”不啟用該選項。
如果使用“--disable-shared”選項進行了配置操作,可使用下述命令,從靜態庫創建“.so”文件。
shell> cd MyODBC-3.51.01
shell> make
shell> cd driver
shell> CC=/usr/bin/gcc \
$CC -bundle -flat_namespace -undefined error \
-o .libs/libmyodbc3-3.51.01.so \
catalog.o connect.o cursor.o dll.o error.o execute.o \
handle.o info.o misc.o myodbc3.o options.o prepare.o \
results.o transact.o utility.o \
-L/usr/local/mysql/lib/mysql/ \
-L/usr/local/iodbc/lib/ \
-lz -lc -lmysqlclient -liodbcinst
如果你正在使用unixODBC而不是iODBC,務必將“-liodbcinst”更改為“-lodbcinst”,并相應地配置庫路徑。
這樣,就創建了libmyodbc3-3.51.01.so文件,并將其放在“.libs”目錄下。將該文件拷貝到MyODBC庫目錄下(/usr/local/lib,或使用“--prefix”提供的安裝目錄下的“lib”目錄)。
shell> cd .libs
shell> cp libmyodbc3-3.51.01.so /usr/local/lib
shell> cd /usr/local/lib
shell> ln -s libmyodbc3-3.51.01.so libmyodbc3.so
要想創建線程安全驅動程序庫:
shell> CC=/usr/bin/gcc \
$CC -bundle -flat_namespace -undefined error
-o .libs/libmyodbc3_r-3.51.01.so
catalog.o connect.o cursor.o dll.o error.o execute.o
handle.o info.o misc.o myodbc3.o options.o prepare.o
results.o transact.o utility.o
-L/usr/local/mysql/lib/mysql/
-L/usr/local/iodbc/lib/
-lz -lc -lmysqlclient_r -liodbcinst
#### 26.1.7.9.?安裝驅動庫
要想安裝驅動程序庫,請執行下述命令: shell> make install
該命令將安裝下述庫集合之一:
對于MyODBC 3.51:
·???????? libmyodbc3.so
·???????? libmyodbc3-3.51.01.so,其中,3.51.01是驅動程序的版本
·???????? libmyodbc3.a
對于線程安全MyODBC 3.51:
·???????? libmyodbc3_r.so
·???????? libmyodbc3-3_r.51.01.so
·???????? libmyodbc3_r.a
對于MyODBC 2.5.0:
·???????? libmyodbc.so
·???????? libmyodbc-2.50.39.so,其中,2.50.39是驅動程序的版本
·???????? libmyodbc.a
關于創建進程的更多信息,請參閱與源碼分發版一起提供的INSTALL文件。注意,如果你試圖使用Sun的“make”,可能會以錯誤結束。從另一方面來說,GNU **gmake**在所有平臺上均能良好工作。
#### 26.1.7.10.?在Unix平臺上測試MyODBC
要想與你創建的庫一起運行分發版中提供的示例,可執行: shell> make test
首先,務必在odbc.ini中配置DSN 'myodbc3',并將環境變量ODBCINI指向正確的odbc.ini文件;同時MySQL服務器應處于運行狀態。在驅動分發版中,可找到一個示例用odbc.ini文件。
你甚至可以更改示例/運行示例腳本,以命令行參數的形式將所需的DSN、UID和PASSWORD值傳遞給示例。
#### 26.1.7.11.?Mac OS X注意事項
要想在Mac OS X (Darwin)環境下創建驅動程序,可使用下述**configure**示例: shell> ./configure --prefix=/usr/local
?????????? --with-unixODBC=/usr/local
?????????? --with-mysql-path=/usr/local/mysql
?????????? --disable-shared
?????????? --enable-gui=no
?????????? --host=powerpc-apple
該命令假定unixODBC和MySQL均安裝在默認位置。如不然,請進行相應配置。
在 Mac OS X環境下,“--enable-shared”選項將默認創建“.dylib”文件。你也可以采用下述方式創建“.so”文件:
shell> make
shell> cd driver
shell> CC=/usr/bin/gcc \
???? $CC -bundle -flat_namespace -undefined error
???????? -o .libs/libmyodbc3-3.51.01.so *.o
???????? -L/usr/local/mysql/lib/
???????? -L/usr/local/iodbc/lib
???????? -liodbcinst -lmysqlclient -lz -lc
要想創建線程安全驅動程序庫:
shell> CC=/usr/bin/gcc \
???? $CC -bundle -flat_namespace -undefined error
???? -o .libs/libmyodbc3-3.51.01.so *.o
???? -L/usr/local/mysql/lib/
???? -L/usr/local/iodbc/lib
???? -liodbcinst -lmysqlclienti_r -lz -lc -lpthread
如果你正在使用unixODBC而不是iODBC,務必將“-liodbcinst”更改為“-lodbcinst”,并相應地配置庫路徑。
在Apple的GCC版本中,**cc**和**gcc**實際上均是**gcc3**的符號鏈接。
將該庫拷貝到$prefix/lib目錄下,并將symlink拷貝到libmyodbc3.so。
可以使用下述命令交叉檢驗輸出的共享庫屬性:
shell> otool -LD .libs/libmyodbc3-3.51.01.so
#### 26.1.7.12.?HP-UX注意事項
要想在HP-UX 10.x或11.x環境下創建驅動程序,可使用下述**configure**示例:
如果使用**cc**:
shell> CC="cc" \
???? CFLAGS="+z" \
???? LDFLAGS="-Wl,+b:-Wl,+s" \
???? ./configure --prefix=/usr/local
?????????? --with-unixodbc=/usr/local
?????????? --with-mysql-path=/usr/local/mysql/lib/mysql
?????????? --enable-shared
?????????? --enable-thread-safe
如果使用**g**cc****:
shell> CC="gcc" \
???? LDFLAGS="-Wl,+b:-Wl,+s" \
???? ./configure --prefix=/usr/local
?????????? --with-unixodbc=/usr/local
?????????? --with-mysql-path=/usr/local/mysql
?????????? --enable-shared
?????????? --enable-thread-safe
一旦創建了驅動程序,使用“**chatr .libs/libmyodbc3.sl**”交叉檢查其屬性,查看是否需要使用SHLIB_PATH環境變量的MySQL客戶端庫。對于靜態版,忽略所有的共享庫選項,并使用“--disable-shared”選項運行“**configure**”。
#### 26.1.7.13.?AIX注意事項
要想在AIX環境下創建驅動程序,可使用下述**configure**示例:
shell> ./configure --prefix=/usr/local
?????????? --with-unixodbc=/usr/local
?????????? --with-mysql-path=/usr/local/mysql
?????????? --disable-shared
?????????? --enable-thread-safe
**注釋:** 關于在不同平臺上創建和設置靜態和共享庫方式的更多信息,請參見[跨平臺使用靜態和共享庫](http://www.fortran-2000.com/ArnaudRecipes/sharedlib.html)。
### 26.1.8.?從BitKeeper開發源碼樹安裝MyODBC
注釋: 如果你對協助我們測試新的代碼感興趣,應閱讀本節的內容。
要想獲得我方的最新開發源碼樹,請:
1.??? 參見[2.8.3節,“從開發源碼樹安裝”](# "2.8.3.?Installing from the Development Source Tree"),關于如何下載和安裝BitKeeper的說明。
2.??? 安裝完BitKeeper后,首先進入打算在其中工作的目錄,然后,如果打算克隆MyODBC 3.51分支,請使用該命令:
3.?????????? shell> bk clone bk://mysql.bkbits.net/myodbc3 myodbc-3.51
在前面的示例中,源碼樹是在myodbc-3.51/中設置的,或在當前目錄的myodbc3/子目錄下設置的(默認)。如果你位于防火墻后,而且僅能啟動HTTP連接,也可以通過HTTP使用BitKeeper。如果要求使用代理服務器,可簡單地設置環境變量http_proxy,使之指向代理服務器:
shell> export http_proxy="http://your.proxy.server:8080/"
執行克隆操作時,用http://替換bk://。例如:
shell> bk clone http://mysql.bkbits.net/myodbc3 myodbc-3.51
首次下載源碼樹時需要一段時間,具體情況取決于連接速度,請耐心等候。
4.??? 要想運行下一組命令,需要GNU autoconf 2.52(或更新版本),automake 1.4,libtool 1.4,以及m4。
5.?????????? shell> cd myodbc-3.51
6.?????????? shell> bk -r edit
7.?????????? shell> aclocal; autoheader; autoconf;? automake;
8.?????????? shell> ./configure? # Add your favorite options here
9.?????????? shell> make
關于如何創建的更多信息,請參閱位于相同目錄下的INSTALL文件。在Windows平臺下,創建驅動程序時,請使用Windows Makefiles WIN-Makefile和WIN-Makefile_debug,更多信息,請參見[26.1.6節,“在Windows平臺上從源碼版本安裝MyODBC”](# "26.1.6.?Installing MyODBC from a Source Distribution on Windows")。
10.完成創建后,運行**make install**,將MyODBC 3.51驅動程序安裝到你的系統上。
11.如果進入了**make**階段,但并未編譯分發版本,請將其通報給[myodbc@lists.mysql.com](#)。
12.啟動了**bk clone**操作獲得源碼樹后,應定期運行**bk pull**進行更新。
13.可以使用“**bk sccstool**”檢查樹的變更史。如果你發現了有趣的差異,并對代碼存在一問,請立刻發送電子郵件至[myodbc@lists.mysql.com](#)。
此外,如果你認為有更好的主意,請發送電子郵件至相同的地址并附上補丁。更改了源碼后,使用“**bk diffs**”可生成補丁。如果你沒有時間就你的觀點編寫代碼,可發送描述性信息。
14.BitKeeper具有一個可通過**bk helptool**訪問的幫助工具。
通過瀏覽[http://mysql.bkbits.net:8080/myodbc3](http://mysql.bkbits.net:8080/myodbc3),也能在線瀏覽變化集、注釋和源代碼。
### 26.1.9.?MyODBC配置
[ 26.1.9.1. 什么是數據源名?](#)[ 26.1.9.2. 在Windows上配置MyODBC DSN](#)[ 26.1.9.3. 在Unix平臺上配置MyODBC DSN](#)[ 26.1.9.4. 連接參數](#)[ 26.1.9.5. 沒有預定義DSN下的連接](#)[ 26.1.9.6. 建立從系統A到系統B的遠程連接](#)[ 26.1.9.7. 獲取ODBC跟蹤文件](#)[ 26.1.9.8. 用MyODBC測試的應用程序](#)[ 26.1.9.9. 已知的能與MyODBC一起工作的程序](#)
本節介紹了配置MyODBC的方法,包括DSN創建,以及驅動程序在連接字符串中作為輸入參數的不同參數。此外,還介紹了創建ODBC跟蹤文件的方法。
#### 26.1.9.1.?什么是數據源名?
“數據源”是提供數據的地點。數據源必須有穩定的標識符,即數據源名。使用數據源名,MySQL可訪問初始化信息。通過初始化信息,MySQL能夠了解去哪里訪問數據庫,以及在開始訪問時使用什么設置。
事實上,數據源就是數據的路徑。在不同的情況下,它可能有著不同的內容,但是在典型情況下,它指明了正在運行的MySQL服務器(例如,通過網絡地址或服務器名),連接時該服務器的默認數據庫,以及必要的連接信息(如端口)。MySQL驅動程序(以及Windows系統上的ODBC驅動管理器)將使用數據源進行連接。對于該目的,名為Microsoft ODBC數據源管理器的管理工具可能十分有用。
有兩處可能保存初始化信息的位置: Windows注冊表(Windows系統),或DSN文件(任何系統)。
如果信息位于Windows注冊表中,它稱為“機器數據源”。它可以是“用戶數據源”,在這種情況下,只有一位用戶能看到它。它也可以是“系統數據源”,在這種情況下,計算機上的所有用戶均能訪問它,如果用戶是通過Microsoft Windows NT服務連接在一起的話,與該計算機相連的所有用戶均能訪問它。運行ODBC數據管理程序時,可以選擇是否使用“用戶”或“系統”,它們位于不同的選項卡上。
如果信息位于DSN文件中,它稱為“文件數據源”。這是一種文本文件。其優點在于: (a)它適合于任何類型的計算機,而不僅僅是使用Windows操作系統的計算機;(b)其內容的拷貝或傳輸相對容易。
#### 26.1.9.2.?在Windows上配置MyODBC DSN
要想在Windows平臺上添加和配置新的MyODBC數據源,請使用ODBC數據源管理器。ODBC管理器能夠更新數據源連接信息。添加了數據源時,ODBC管理器能夠更新注冊信息。
要想從控制面板打開ODBC管理器:
1.??? 點擊“開始”,將指針指向“設置”,然后點擊“控制面板”。
2.??? 在運行Microsoft Windows 2000或更新版本的計算機上,雙擊“管理工具”,然后雙擊“數據源”(ODBC)。在運行舊版本Windows的計算機上,雙擊32位ODBC或ODBC。

打開ODBC數據源管理器對話框,如下圖所示:

點擊“幫助”以了解ODBC數據源管理器對話框各選項卡的詳細信息。
要想在Windows平臺上添加數據源:
1.??? 打開ODBC數據源管理器。
2.??? 在ODBC數據源管理器對話框中,點擊“添加”。打開“創建新數據源”對話框。
3.??? 選擇MySQL ODBC 3.51驅動程序,然后點擊“完成”。打開“MySQL ODBC 3.51驅動程序-DSN配置”對話框,如下圖所示:

4.??? 在“數據源名”框中,輸入打算訪問的數據源的名稱。它可以是你選擇的任何有效名稱。
5.??? 在“描述”框中,輸入DSn所需的描述信息。
6.??? 在“主機”或“服務器名”(或IP)框中,輸入準備訪問的MySQL服務器主機的名稱。默認情況下為localhost(本地主機)。
7.??? 在“數據庫名”框中,輸入準備用作默認數據庫的MySQL數據庫名稱。
8.??? 在“用戶”框中,輸入你的MySQL用戶名(數據庫用戶ID)。
9.??? 在“密碼”框中輸入密碼。
10.在“端口”框中,如果端口不是默認端口,輸入端口號。
11.在“SQL命令”框中,可輸入建立連接后自動執行的SQL語句。
最后,對話框與下圖顯示的類似:

點擊“OK”添加該數據源。
**注釋: ** 點擊“OK”后,將打開“數據源”對話框,ODBC管理器將更新注冊信息。連接到該數據源時,你所輸入的用戶名和連接字符串將成為該數據源的默認連接值。
你也可以使用“測試數據源”按鈕,測試你的設置是否適合于連接到服務器。該特性僅對MyODBC 3.51驅動程序有效。成功完成測試后,將顯示下述窗口:

如果測試失敗,將顯示錯誤消息。

DNS配置對話框也有一個“選項”按鈕。如果選擇了它,將打開下述選項對話框,顯示控制驅動程序的行為。關于這些選項的含義,請參見[26.1.9.4節,“連接參數”](# "26.1.9.4.?Connection Parameters")。

注釋: 在“驅動程序跟蹤”選項下列出的選項已被禁止(灰色),除非你使用的是驅動DLL的調試版本。
要想在Windows平臺上更改數據源:
1.??? 打開ODBC數據源管理器。點擊恰當的選項卡“DSN”。
2.??? 選擇打算更改的MySQL數據源,然后點擊“配置”。打開“MySQL ODBC 3.51驅動程序-DSN配置”對話框。
3.??? 更改適用的數據源字段,然后點擊“OK”。
更改完該對話框中的信息后,ODBC管理器將更新注冊信息。
#### 26.1.9.3.?在Unix平臺上配置MyODBC DSN
在Unix平臺上,可以直接在odbc.ini文件中配置DSN條目。這里給出了1個典型的odbc.ini文件,在該文件中,分別將myodbc和myodbc3配置為MyODBC 2.50和MyODBC 3.51的DSN名稱:
;
;? odbc.ini對MyODBC和MyODBC 3.51驅動程序的配置
;
[ODBC Data Sources]
myodbc = MyODBC 2.50 Driver DSN
myodbc3 = MyODBC 3.51 Driver DSN
[myodbc]
Driver = /usr/local/lib/libmyodbc.so
Description = MyODBC 2.50 Driver DSN
SERVER = localhost
PORT =
USER = root
Password =
Database = test
OPTION = 3
SOCKET =
[myodbc3]
Driver = /usr/local/lib/libmyodbc3.so
Description = MyODBC 3.51 Driver DSN
SERVER = localhost
PORT =
USER = root
Password =
Database = test
OPTION = 3
SOCKET =
[Default]
Driver = /usr/local/lib/libmyodbc3.so
Description = MyODBC 3.51 Driver DSN
SERVER = localhost
PORT =
USER = root
Password =
Database = test
OPTION = 3
SOCKET =
關于可提供連接參數的清單,請參見[26.1.9.4節,“連接參數”](# "26.1.9.4.?Connection Parameters")。
注釋: 如果你正在使用unixODBC,可使用下述工具設置DSN:
·???????? ODBCConfig GUI tool([HOWTO: ODBCConfig](http://www.unixodbc.org/config.html))
·???????? odbcinst
在某些情況下使用unixODBC,可能會出現下述錯誤:
Data source name not found and no default driver specified(數據源名不存在,未指定默認驅動程序)
如果出現該情況,請確認ODBCINI和ODBCSYSINI環境變量指向正確的odbc.ini文件。例如,如果你的odbc.ini文件位于目錄“/usr/local/etc”下,可將環境變量設為:
export ODBCINI=/usr/local/etc/odbc.ini
export ODBCSYSINI=/usr/local/etc
#### 26.1.9.4.?連接參數
你可以在ODBC.INI文件的[Data Source Name](數據源名)部分、或通過SQLDriverConnect() call的InConnectionString參量為MyODBC指定下述參數。
<table border="1" cellpadding="0" id="table1"><tr><td> <p><b>參數</b></p></td> <td> <p><b>默認值</b></p></td> <td> <p><b>注釋</b></p></td> </tr><tr><td> <p> <span>user</span></p></td> <td> <p><span>ODBC (on Windows)</span></p></td> <td> <p>用于鏈接至MySQL的用戶名。</p></td> </tr><tr><td> <p> <span>server</span></p></td> <td> <p> <span>localhost</span></p></td> <td> <p>MySQL服務器的主機名。</p></td> </tr><tr><td> <p> <span>database</span></p></td> <td> <p><span>?</span></p></td> <td> <p>默認數據庫。</p></td> </tr><tr><td> <p> <span>option</span></p></td> <td> <p><span>0</span></p></td> <td> <p>指定MyODBC工作方式的選項。參見下面。</p></td> </tr><tr><td> <p> <span>port</span></p></td> <td> <p><span>3306</span></p></td> <td> <p>如果服務器不是本地主機將要使用的TCP/IP端口。</p></td> </tr><tr><td> <p> <span>stmt</span></p></td> <td> <p><span>?</span></p></td> <td> <p>連接至MySQL時將要執行的語句。</p></td> </tr><tr><td> <p> <span>password</span></p></td> <td> <p><span>?</span></p></td> <td> <p>服務器上用戶賬戶的密碼。</p></td> </tr><tr><td> <p> <span>socket</span></p></td> <td> <p><span>?</span></p></td> <td> <p> 當服務器是本地主機是將要連接的Unix套接字文件或Windows命名管道。</p></td> </tr></table>
選項參量用于通知MyODBC:客戶端不是100% ODBC兼容的。在Windows平臺下,正常情況下,應通過切換連接屏幕上的復選框選擇選項,但也能在選項參量中選擇它們。下述選項是按照它們在MyODBC連接屏幕上顯示的順序排列的:
<table border="1" cellpadding="0" id="table2"><tr><td> <p><b>值</b></p></td> <td> <p><b>描述</b></p></td> </tr><tr><td> <p><span>1</span></p></td> <td> <p>客戶端無法處理,MyODBC返回列的實際寬度。</p></td> </tr><tr><td> <p><span>2</span></p></td> <td> <p> 客戶端無法處理,MyODBC返回受影響行的真值。如果設置了該標志,MySQL將返回“發現的行”取而代之。MySQL的版本必須是3.21.14或更高版本,該功能才能生效。</p></td> </tr><tr><td> <p><span>4</span></p></td> <td> <p>在<span>c:\myodbc.log中生成調試日志。它與將MYSQL_DEBUG=d:t:O,c::\myodbc.log放到AUTOEXEC.BAT中的效果相同</span>(在Unix平臺下,該文件是<span>/tmp/myodbc.log</span>)。</p></td> </tr><tr><td> <p><span>8</span></p></td> <td> <p>不為結果和參數設置任何信息報限制。</p></td> </tr><tr><td> <p><span>16</span></p></td> <td> <p>即使驅動程序可能會給出提示,對出現的問題不予提示。</p></td> </tr><tr><td> <p><span>32</span></p></td> <td> <p>允許或禁止動態光標支持。(在MyODBC 2.50中不允許)。</p></td> </tr><tr><td> <p><span>64</span></p></td> <td> <p>在<span>db_name.tbl_name.col_name中忽略數據庫名的使用。</span></p></td> </tr><tr><td> <p><span>128</span></p></td> <td> <p>強制使用ODBC管理器光標(實驗性)。</p></td> </tr><tr><td> <p><span>256</span></p></td> <td> <p>禁止使用擴展取數據(實驗性)。</p></td> </tr><tr><td> <p><span>512</span></p></td> <td> <p>將<span>CHAR列填充為全列寬。</span></p></td> </tr><tr><td> <p><span>1024</span></p></td> <td> <p><span> SQLDescribeCol()</span>返回完全合格的列名。</p></td> </tr><tr><td> <p><span>2048</span></p></td> <td> <p>使用壓縮客戶端/服務器協議。</p></td> </tr><tr><td> <p><span>4096</span></p></td> <td> <p> 通知服務器忽略函數名之后和“(”之前的空格(PowerBuilder要求這樣)。這會使所有的函數名成為關鍵字。</p></td> </tr><tr><td> <p><span>8192</span></p></td> <td> <p>用命名管道鏈接至運行在NT環境下的<strong><span>mysqld</span></strong>服務器。</p></td> </tr><tr><td> <p><span>16384</span></p></td> <td> <p>將<span>LONGLONG列更改為INT列(某些應用程序不能處理LONGLONG列)</span>。</p></td> </tr><tr><td> <p><span>32768</span></p></td> <td> <p>從<span>SQLTables返回作為Table_qualifier</span>和<span>Table_owner的用戶</span>(實驗性)。</p></td> </tr><tr><td> <p><span>65536</span></p></td> <td> <p>從<span>my.cnf的[client]</span>和<span>[odbc]組讀取參數。</span></p></td> </tr><tr><td> <p><span>131072</span></p></td> <td> <p>增加一些額外檢查(不應需要之,但<span>…</span>)。</p></td> </tr><tr><td> <p><span>262144</span></p></td> <td> <p>禁止事務。</p></td> </tr><tr><td> <p><span>524288</span></p></td> <td> <p>允許將查詢記錄到<span>c:\myodbc.sql</span>(<span>/tmp/myodbc.sql</span>)文件。(僅在調試模式下才能啟用)。</p></td> </tr><tr><td> <p><span>1048576</span></p></td> <td> <p>不要驅動中的結果進行緩沖處理,而應從服務器讀取“<span>mysql_use_result()</span>”。僅對正向光標才能起作用。當你不希望緩沖處理整個結果集時,對于大表處理,該選項十分重要。</p></td> </tr><tr><td> <p><span>2097152</span></p></td> <td> <p> 強制使用正向光標類型。在應用程序設置了默認靜態/動態光標類型的情況下,如果希望驅動程序使用非緩沖結果集,那么該選項能夠保證正向光標的行為。</p></td> </tr></table>
要想選擇多個選項,可將它們的值加在一起。例如,將選項設置為12(4+8),就能獲得調試功能,但沒有信息包限制。
默認的myodbc3.dll是為優化性能而編譯的。如果希望調試MyODBC 3.51(例如,啟用跟蹤功能),應使用myodbc3d.dll。要想安裝該文件,請拷貝myodbc3d.dll,使之覆蓋已安裝的myodbc3.dll文件。一旦完成了調試操作,務必恢復至驅動DLL的發布版本,這是因為調試版本可能會導致性能問題。注意,在MyODBC 3.51.07至3.51.11中未包含myodbc3d.dll。如果你正在使用這些版本中的一個,應從之前的版本(例如3.51.06)拷貝該DLL文件。
對于MyODBC 2.50,采用了myodbc.dll和myodbcd.dll取而代之。
在下面的表各中,給出了針對各種配置的推薦選項值:
<table border="1" cellpadding="0" id="table3"><tr><td> <p><b>配置</b></p></td> <td> <p><b>選項值</b></p></td> </tr><tr><td> <p>Microsoft Access</p></td> <td> <p><span>3</span></p></td> </tr><tr><td> <p>Microsoft Visual Basic</p></td> <td> <p><span>3</span></p></td> </tr><tr><td> <p>具有很多行的大表</p></td> <td> <p><span>2049</span></p></td> </tr><tr><td> <p>驅動跟蹤生成(調試模式)</p></td> <td> <p><span>4</span></p></td> </tr><tr><td> <p>查詢日志生成(調試模式)</p></td> <td> <p><span>524288</span></p></td> </tr><tr><td> <p>生成驅動跟蹤和查詢日志(調試模式)</p></td> <td> <p><span>524292</span></p></td> </tr><tr><td> <p>具有非緩沖結果的大表</p></td> <td> <p><span>3145731</span></p></td> </tr></table>
#### 26.1.9.5.?沒有預定義DSN下的連接
是。通過指定DRIVER名稱字段,可使用SQLDriverConnect連接到MySQL服務器。下面給出了使用DSN-Less連接的MyODBC連接字符串:
**對于MyODBC 2.50:**
ConnectionString = "DRIVER={MySQL};\
????????????????? SERVER=localhost;\
????????????????? DATABASE=test;\
????????????????? USER=venu;\
????????????????? PASSWORD=venu;\
????????????????? OPTION=3;"
**對于MyODBC 3.51:**
ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};\
????????????????? SERVER=localhost;\
????????????????? DATABASE=test;\
????????????????? USER=venu;\
????????????????? PASSWORD=venu;\
??????????? ??????OPTION=3;"
如果你使用的編程語言會將后跟空格的反斜杠轉換為空格,最好將連接字符串指定為單個長字符串,或使用不會在其中添加空格的多個字符串串接。例如:
ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};"
????????????????? "SERVER=localhost;"
????????????????? "DATABASE=test;"
???????????? ?????"USER=venu;"
?????????? ???????"PASSWORD=venu;"
????????????????? "OPTION=3;"
關于可提供連接參數的清單,請參見[26.1.9.4節,“連接參數”](# "26.1.9.4.?Connection Parameters")。
#### 26.1.9.6.?建立從系統A到系統B的遠程連接
如果你打算使用myuser和mypassword作為用戶名和密碼從系統B連接到系統A,可參考下面給出的簡單步驟。
在系統A上,執行下述步驟:
1.??? 啟動MySQL服務器。
2.??? 使用GRANT建立用戶名為myuser的賬戶,該賬戶可使用密碼myuser從系統B建立連接。
3.???????????? GRANT ALL ON *.* to 'myuser'@'B' IDENTIFIED BY 'mypassword';
4.??? GRANT語句為用戶myuser授予了使用密碼mypassword從系統B進行連接的所有權限。要想執行該語句,必須在系統A上擁有根用戶權限,或是具有恰當權限的另一用戶。關于MySQL權限的更多信息,請參見[5.8節,“MySQL用戶賬戶管理”](# "5.8.?MySQL User Account Management")。
在系統B上,執行下述步驟:
1.??? 使用下述連接參數配置MyODBC DSN:
2.?????????? DSN??????????? = remote_test
3.?????????? SERVER or HOST = A (or IP address of system A)
4.?????????? DATABASE?????? = test (The default database or an appropriate one)
5.?????????? USER?????????? = myuser
6.?????????? PASSWORD?????? = mypassword
關于建立DSN-less連接的更多信息,請參見[26.1.9.5節,“沒有預定義DSN下的連接”](# "26.1.9.5.?Connecting Without a Predefined DSN")。
7.??? 使用Ping命令或其它方式檢查是否能從系統B訪問系統A。如果無法訪問系統A,請檢查網絡或Internet連接,或與你的系統管理員聯系。
8.??? 嘗試使用DSN=remote_test進行連接。如果失敗,請跟蹤查詢MyODBC日志,并根據日志給出的錯誤信息采取進一步的步驟。如果需要進一步幫助,請發送詳細的電子郵件至[myodbc@lists.mysql.com](#)。
在下述站點,你可以找到關于如何完成該操作的簡單示例:[http://www.phphelp.com/tutorial/using-myodbc-to-connect-to-a-remote-database.html](http://www.phphelp.com/tutorial/using-myodbc-to-connect-to-a-remote-database.html).
#### 26.1.9.7.?獲取ODBC跟蹤文件
如果遇到與MyODBC有關的困難或問題,首先應使用ODBC管理器和MyODBC生成一份日志文件(請求來自ODBC ADMIN的日志時獲得的日志文件)。
要想通過驅動管理器獲得ODBC跟蹤文件,可采取下述步驟:
·???????? 打開ODBC數據源管理器:
1.??? 點擊“開始”,將指針指向“設置”,然后點擊“控制面板”。
2.??? 在運行Microsoft Windows 2000、XP或2003的計算機上,雙擊“管理工具”,然后雙擊“數據源”(ODBC),如下圖所示。

在運行早期Microsoft Windows版本的計算機上,雙擊“控制面板”中的32位ODBC或ODBC。
3.??? 打開ODBC數據源管理器對話框,如下圖所示:

4.??? 點擊“幫助”以了解ODBC數據源管理器對話框各選項卡的詳細信息。
·???????? 啟用跟蹤選項 對于Windows和Unix平臺,該步驟不同。
要想在Windows平臺上啟用跟蹤選項:
1.??? 通過“ODBC數據源管理器”對話框的“跟蹤”選項卡,可對跟蹤ODBC函數的方式進行配置。
2.??? 從“跟蹤”選項卡激活了跟蹤功能后,驅動管理器會對后續運行的所有應用程序的ODBC函數調用進行跟蹤。
3.??? 激活跟蹤功能前所運行應用程序的ODBC函數調用不會被記錄。ODBC函數調用將被記錄在你指定的日志文件中。
4.??? 點擊“現在停止跟蹤”后,跟蹤功能將停止。請記住,啟動跟蹤功能后,日志文件將不斷增大,而且跟蹤功能會影響所有ODBC應用程序的性能。

要想在Unix平臺上啟用跟蹤選項:
5.??? 在Unix平臺上,需要在ODBC.INI文件中明確設置跟蹤選項。
使用TraceFile和odbc.ini中的Trace(跟蹤)參數打開或關閉跟蹤功能,如下所示:
TraceFile? = /tmp/odbc.trace
Trace????? = 1
TraceFile指明了跟蹤文件的名稱和完整路徑,將Trace(跟蹤)設為ON或OFF。也可以使用“1”或“Yes”表示ON,以及“0”或“No”表示OFF。如果正在使用unixODBC的**ODBCConfig**,然后遵照[HOWTO-ODBCConfig](http://www.unixodbc.org/config.html)中介紹的關于跟蹤unixODBC調用的指示說明。
要想生成MyODBC日志,可采取下述步驟:
6.??? 確保你所使用的是驅動程序調試DLL(對于MyODBC 3.51,它是myodbc3d.dll而不是myodbc3.dll,對于MyODBC 2.50,它是myodbcd.dll)。
最簡單的方法是從MyODBC 3.51分發版找到myodbc3d.dll(或myodbcd.dll),并用其覆蓋myodbc3.dll(或myodbc.dll),該文件通常位于C:\windows\system32或C:\winnt\system32目錄下。注意,完成測試后,你或許希望恢復舊的myodbc.dll文件,這是因為它比myodbc3d.dll(或myodbcd.dll)快很多,因此,請保存原始DLL的備份。
7.????? 在“MyODBC連接/配置”屏幕上啟用“跟蹤MyODBC”選項。日志將被寫入文件C:\myodbc.log。當你返回上述屏幕時,如果你設置的跟蹤選項未被記住,表明你正在使用的是myodbcd.dll驅動(參見前面的介紹)。在Linux平臺上,或你使用的是DSN-Less連接,需在連接字符串中提供“OPTION=4”。
8.??? 啟動應用程序,并嘗試著使其出現問題。然后檢查MyODBC跟蹤文件,找出可能出錯的地方。
如果發現某些事項出錯,請發送電子郵件至[myodbc@lists.mysql.com](#)(或[support@mysql.com](#),如果有與MySQL AB簽訂的支持合同),簡要描述出現的問題,并提供下述額外信息:
o??????? MyODBC版本
o??????? ODBC驅動管理器的類型和版本
o??????? MySQL服務器的版本
o??????? 驅動管理器的ODBC跟蹤
o??????? 來自MyODBC驅動的MyODBC日志文件
o??????? 簡單的可復制示例
請記住,你提供給我們的信息越多,我們更正問題的機會就越大。
此外,在提供缺陷信息前,請檢查MyODBC郵件列表([http://lists.mysql.com/](http://lists.mysql.com/))。
#### 26.1.9.8.?用MyODBC測試的應用程序
使用下述應用程序測試了MyODBC:
-
MS Access 95, 97, 2000, and 2002
-
C++-Builder, Borland Builder 4
-
Centura Team Developer (formerly Gupta SQL/Windows)
-
ColdFusion (on Solaris and NT with service pack 5), [How-to: MySQL and Coldfusion](http://www.njwtech.net/addons/coldfusion/mysql.html). [Troubleshooting Data Sources and Database Connectivity for UnixPlatforms](http://www.macromedia.com/v1/handlers/index.cfm?ID=11328&Method=Full&PageCall=/support/index.cfm).
-
Crystal Reports
-
DataJunction
-
Delphi
-
ERwin
-
MS Excel
-
iHTML
-
FileMaker Pro
-
FoxPro
-
Notes 4.5/4.6
-
MS Visio Enterprise 2000
-
Vision
-
Visual Objects
-
Visual Interdev
-
SBSS
-
Perl DBD-ODBC
-
Paradox
-
Powerbuilder
-
Powerdesigner 32-bit
-
MS Visual C++
-
Visual Basic
-
ODBC.NET through CSharp(C#), VB and C++
-
Data Architect([http://thekompany.com/products/dataarchitect/](http://thekompany.com/products/dataarchitect/))
-
SQLExpress for Xbase++([http://www.SQLExpress.net](http://www.SQLExpress.net))
-
Open Office ([http://www.openoffice.org](http://www.openoffice.org)) [How-to: MySQL + OpenOffice](http://dba.openoffice.org/proposals/MySQL_OOo.html). [How-to: OpenOffice + MyODBC + unixODBC](http://www.unixodbc.org/doc/OOoMySQL.pdf).
-
Star Office ([http://wwws.sun.com/software/star/staroffice/6.0/index.html](http://wwws.sun.com/software/star/staroffice/6.0/index.html))
-
G2-ODBC bridge ([http://www.gensym.com](http://www.gensym.com))
-
Sambar Server ([http://www.sambarserver.info](http://www.sambarserver.info)) [How-to: MyODBC + SambarServer + MySQL](http://www.sambarserver.info/article.php?sid=66).
如果你知道能夠與MyODBC一起工作的其他應用程序,請以電子郵件的方式指明它:[myodbc@lists.mysql.com](#)。
#### 26.1.9.9.?已知的能與MyODBC一起工作的程序
大多數程序均能與MyODBC一起工作,對上面所列的每一程序,我們自己進行了測試,或得到用戶的確認。很多介紹中均給出了你可能會遇到問題的描述。
·???????? 程序
注釋
·???????? Access
要想使Access工作:
o??????? 如果你正在使用Access 2000,應從下述地址獲取并安裝最新的(2.6版或更高)Microsoft MDAC(Microsoft數據訪問組件),[http://www.microsoft.com/data/](http://www.microsoft.com/data/)。它更正了Access在將數據導出至MySQL時存在的一個缺陷,未指定表名和列名。另一種解決該缺陷的方法是,升級到MyODBC 2.50.33和MySQL 3.23.x, 它們共同提供了避免該問題的一種方式。
此外,你還應獲取并應用Microsoft Jet 4.0 Service Pack 5 (SP5),可在下述地址找到它:[http://support.microsoft.com/default.aspx?scid=kb;EN-US;q239114](http://support.microsoft.com/default.aspx?scid=kb;EN-US;q239114)。它修正了某些情況下在Access中列被標注為“#DELETED#”的問題。
注釋: 如果你正使用MySQL 3.22,必須安裝MDAC補丁,并使用MyODBC 2.50.32或2.50.34或更高版本以解決該問題。
o??????? 對于所有版本的Access,應啟用“MyODBC返回匹配行”選項。對于Access 2.0,還應額外啟用“模擬ODBC 1.0”選項。
o??????? 在希望能夠更新的所有表中,均應有時間戳。為了獲得最大的可移植性,在列聲明中不要使用長度規范。也就是說,應使用TIMESTAMP,而不是TIMESTAMP(_n_), _n_ < 14。
o??????? 在表中應有1個主鍵。如不然,新的或更新的行可能會顯示為“#DELETED#”。
o??????? 僅應使用DOUBLE浮點字段。與單精度浮點進行比較時,Access將失敗。其征兆是新的或更新的行可能會顯示為“#DELETED#”,或無法找到或更新行。
o??????? 如果你正使用MyODBC來鏈接到有BIGINT列的表,結果會顯示為“#DELETED”。排除它的解決方案是:
§???????? 有1個以TIMESTAMP作為數據類型的虛擬列。
§???????? 在“ODBC DSN管理器”的連接對話框中選擇“將BIGINT列更改為INT”選項。
§???????? 刪除與Access的表鏈接,并重新創建它。
舊記錄仍將顯示為“#DELETED#”,但新增/更新的記錄會恰當顯示。
o??????? 添加了TIMESTAMP列后,另一位用戶更改了數據,如果錯誤依舊出現,下述技巧或許有所幫助:
不要使用表數據表視圖。取而代之的是,從你希望使用的表創建一個表單,并使用表單數據表視圖。應將TIMESTAM列的DefaultValue屬性設置為NOW()。在視圖中隱藏TIMESTAMP列或許是個好主意,這樣就不會使你的用戶感到迷惑。
o??????? 在某些情況下,Access可能會生成MySQL無法理解的SQL語句。可通過在Access菜單中選擇“Query|SQLSpecific|Pass-Through”來更正該問題。
o??????? 在NT平臺上,Access會將BLOB列通報為OLE OBJECTS(OLE對象)。如果你打算用MEMO列取而代之,應使用ALTER TABLE將BLOB列更改為TEXT。
o??????? Access無法在任何時候均恰當處理DATE列。如果遇到這類問題,請將列更改為DATETIME。
o??????? 如果在Access中存在定義為BYTE的列,Access會視圖將其導出為TINYINT而不是TINYINT UNSIGNED。如果列中的值大于127,將出現問題。
·???????? ADO
使用ADO API和MyODBC進行編碼時,需要注意某些不被MySQL服務器支持的默認屬性。例如,對于RecordCount屬性,如果將CursorLocation屬性用作adUseServer,將返回結果“-1”
- 前言
- 1. 一般信息
- 2. 安裝MySQL
- 3. 教程
- 4. MySQL程序概述
- 5. 數據庫管理
- 6. MySQL中的復制
- 7. 優化
- 8. 客戶端和實用工具程序
- 9. 語言結構
- 10. 字符集支持
- 11. 列類型
- 12. 函數和操作符
- 13. SQL語句語法
- 14. 插件式存儲引擎體系結構
- 15. 存儲引擎和表類型
- 16. 編寫自定義存儲引擎
- 17. MySQL簇
- 18. 分區
- 19. MySQL中的空間擴展
- 20. 存儲程序和函數
- 21. 觸發程序
- 22. 視圖
- 23. INFORMATION_SCHEMA信息數據庫
- 24. 精度數學
- 25. API和庫
- 26. 連接器
- 27. 擴展MySQL
- A. 問題和常見錯誤
- B. 錯誤代碼和消息
- C. 感謝
- D. MySQL變更史
- E. 移植到其他系統
- F. 環境變量
- G. MySQL正則表達式
- H. MySQL中的限制
- I. 特性限制
- J. GNU通用公共許可
- K. MySQL FLOSS許可例外
- 索引