第26章:連接器

目錄

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. 感謝
26.2. MySQL Connector/NET
26.2.1. 前言
26.2.2. 下載並安裝MySQL Connector/NET
26.2.3. Connector/NET體系結構
26.2.4. 使用MySQL Connector/NET
26.2.5. MySQL Connector/NET變更史
26.3. MySQL Connector/J
26.3.1. 基本的JDBC概念
26.3.2. 安裝 Connector/J
26.3.3. JDBC引用
26.3.4. 與J2EE和其他Java框架一起使用 Connector/J
26.3.5. 診斷 Connector/J方面的問題
26.3.6. Changelog
26.4. MySQL Connector/MXJ
26.4.1. 前言
26.4.2. 支援平台:
26.4.3. Junit測試要求
26.4.4. 運行Junit測試
26.4.5. 作為JDBC驅動程式的一部分運行
26.4.6. 在Java對像中運行
26.4.7. MysqldResource API
26.4.8. 在JMX代理(custom)中運行
26.4.9. 部署在標準的JMX代理環境下 (JBoss)
26.4.10. 安裝
在本章中,介紹了MySQL連接器,所謂連接器,是為客戶端程式提供與MySQL伺服器連接性的驅動程式。

26.1. MySQL Connector/ODBC

通過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/

對於本參考的應用程式開發部分,假定用戶在C語言方面有著良好的實踐知識,對DBMS有一般瞭解,最後,還應熟悉MySQL。關於MySQL功能及其語法的更多訊息,請參閱http://dev.mysql.com/doc/

如果您的問題未能在本文檔中得到解答,請發送電子郵件至myodbc@lists.mysql.com

26.1.1. MyODBC介紹

26.1.1.1. 什麼是ODBC?

ODBC(開放式資料庫連接性)為客戶端程式提供了訪問眾多資料庫或數據源的一種方式。ODBC是標準化的API,允許與SQL資料庫伺服器進行連接。它是根據SQL Access Group的規範開發的,它定義了一套函數使用、錯誤代碼和數據類型,可將其用於開發獨立於資料庫的應用程式。通常情況下,當需要資料庫獨立或需要同時訪問不同的數據源時,將用到ODBC。

關於ODBC的更多訊息,請參閱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/

關於MyODBC的更多訊息,請訪問http://www.mysql.com/products/myodbc/

關於授權的更多訊息,請訪問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/

其中,關注程度最高的是論壇MySQL連接器部分的ODBC論壇。

26.1.1.8. MyODBC論壇

通過MySQL論壇(位於http://forums.mysql.com),可獲得有經驗用戶的支援和幫助。

26.1.1.9. 如何通報MyODBC問題或問題

如果遇到與MyODBC有關的困難或問題,首先應使用ODBC管理器和MyODBC生成一份日誌檔案(請求來自ODBC ADMIN的日誌時獲得的日誌檔案)。關於完成該步驟的方式,請參見26.1.9.7節,「獲取ODBC跟蹤檔案」

檢查MyODBC跟蹤檔案,找出可能出錯的地方。通過在myodbc.log檔案中搜索字串>mysql_real_query,可確定已執行的語句。

此外,您還應嘗試從mysql客戶端程式或admndemo執行語句。這樣,就能幫助您確定錯誤的出處,MyODBC或MySQL。

如果您發現了不正確的事項,請將相關行(最多40行)發送給MyODBC郵件列資料表。請參見1.7.1.1節,「MySQL郵件列資料表」。請勿發送整個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介紹

開放式資料庫連接性(ODBC)是廣泛接受的用於資料庫訪問的應用程式編程接口(API)。它基於針對資料庫API的CLI(使用層接口)規範(來自X/Open和ISO/IEC),並採用了結構化查詢語言(SQL)作為其資料庫訪問語言。

26.1.16節,「MyODBC API引用」中,概要介紹了MyODBC支援的ODBC功能。關於ODBC的更多訊息,請參閱http://www.microsoft.com/data/

26.1.2.2. MyODBC體系結構

MyODBC體系結構建立在5個組件上,如下圖所示:

MyODBC Architecture

·         應用程式:

應用程式指的是通過使用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配置」

·         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/

·         unixODBC Unix驅動管理器(libodbc.so),http://www.unixodbc.org

·         iODBC ODBC Unix驅動管理器(libiodbc.so),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/上找到它的最新版本。請注意,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語法」

·         必須建立ODBC DSN條目,方式如下:

1.    打開Windows機器上的控制面板。

2.    雙擊ODBC數據源32位圖標。

3.    點擊選項卡「用戶DSN」。

4.    點擊「新增」按鈕。

5.    在「建立新數據源」屏幕上選擇MySQL,並點擊「完成」按鈕。

6.    顯示MySQL驅動程式的預設配置屏幕。請參見26.1.9.2節,「在Windows上配置MyODBC DSN」

·         啟動應用程式,並使用在ODBC管理器中指定的DSN選擇ODBC驅動程式。

注意,在MySQL屏幕上還顯示了其他選項,如果遇到問題,可嘗試這些選項(如跟蹤、連接時不提示等)。

26.1.4. 在Windows平台上從二進製版本安裝MyODBC

要想在Windows平台上安裝MyODBC,應從下述站點下載恰當的分發檔案,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

要想使用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」

要想卸載驅動程式,請首先成為根用戶,然後執行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」為MyODBC配置DSN。更多訊息,請參見與發佈版一起提供的INSTALL-BINARY檔案。

26.1.6. 在Windows平台上從原始碼版本安裝MyODBC

26.1.6.1. 要求

·         MDAC, Microsoft Data Access SDK:http://www.microsoft.com/data/

·         MySQL客戶端庫以及MySQL 4.0.0或更高版本的包含檔案。(最好是MySQL 4.0.16或更高版本)。應滿足上述要求,這是因為MyODBC需要用到該版本以上的庫才提供的新使用和結構。要想獲得客戶端庫和包含檔案,請訪問http://dev.mysql.com/downloads/

26.1.6.2. 構建MyODBC 3.51

MyODBC 3.51原始碼分發版包括使用nmakeMakefiles。在分發版中,您可以找到用於建立發佈版的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_PATHMYSQL_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

·         如果您正在使用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. 要求

·         MySQL客戶端庫以及MySQL 4.0.0或更高版本的包含檔案。(最好是MySQL 4.0.16或更高版本)。應滿足上述要求,這是因為MyODBC需要用到該版本以上的庫才提供的新使用和結構。要想獲得客戶端庫和包含檔案,請訪問http://dev.mysql.com/downloads/

·         必須使用「--enable-thread-safe-client」選項配置MySQL庫。Libmysqlclient是作為共享庫安裝的。

·         必須安裝下述Unix ODBC驅動管理器之一:

o        iodbc 3.0或更高版本(http://www.iodbc.org

o        unixodbc Alpha 3或更高版本(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驅動管理器(iodbcunixobc)提供標準的頭檔案和庫檔案路徑。

·         如果您正在使用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/includeDIR/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.solibmysqlclient_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版本中,ccgcc實際上均是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

如果使用gcc

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
註釋: 關於在不同平台上建立和設置靜態和共享庫方式的更多訊息,請參見跨平台使用靜態和共享庫

26.1.8. 從BitKeeper開發原始碼樹安裝MyODBC

註釋: 如果您對協助我們測試新的代碼感興趣,應閱讀本節的內容。

要想獲得我方的最新開發原始碼樹,請:

1.    參見2.8.3節,「從開發原始碼樹安裝」,關於如何下載和安裝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.4libtool 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-MakefileWIN-Makefile_debug,更多訊息,請參見26.1.6節,「在Windows平台上從原始碼版本安裝MyODBC」

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,也能線上瀏覽變化集、註釋和源代碼。

26.1.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位ODBCODBC

ODBC Data Sources
              Icon

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

ODBC Data Source
              Administrator Dialog

點擊「幫助」以瞭解ODBC數據源管理器對話框各選項卡的詳細訊息。

要想在Windows平台上新增數據源:

1.    打開ODBC數據源管理器。

2.    在ODBC數據源管理器對話框中,點擊「新增」。打開「建立新數據源」對話框。

3.    選擇MySQL ODBC 3.51驅動程式,然後點擊完成打開「MySQL ODBC 3.51驅動程式-DSN配置對話框,如下圖所示:

MySQL ODBC DSN
              Configuration Dialog

4.    在「數據源名」框中,輸入打算訪問的數據源的名稱。它可以是您選擇的任何有效名稱。

5.    在「描述」框中,輸入DSn所需的描述訊息。

6.    在「主機」或「伺服器名」(或IP)框中,輸入準備訪問的MySQL伺服器主機的名稱。預設情況下為localhost(本地主機)。

7.    在「資料庫名」框中,輸入準備用作預設資料庫的MySQL資料庫名稱。

8.    在「用戶」框中,輸入您的MySQL帳號(資料庫用戶ID)。

9.    在「密碼」框中輸入密碼。

10.在「端口」框中,如果端口不是預設端口,輸入端口號。

11.在「SQL命令」框中,可輸入建立連接後自動執行的SQL語句。

最後,對話框與下圖顯示的類似:

Filled-In MySQL ODBC DSN
              Configuration Dialog

點擊「OK」新增該數據源。

註釋: 點擊「OK」後,將打開「數據源」對話框,ODBC管理器將更新註冊訊息。連接到該數據源時,您所輸入的帳號和連接字串將成為該數據源的預設連接值。

您也可以使用「測試數據源」按鈕,測試您的設置是否適合於連接到伺服器。該特性僅對MyODBC 3.51驅動程式有效。成功完成測試後,將顯示下述窗口:

MyODBC Successful Connection
          Message

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

MyODBC Failed Connection Message

DNS配置對話框也有一個「選項」按鈕。如果選擇了它,將打開下述選項對話框,顯示控制驅動程式的行為。關於這些選項的含義,請參見26.1.9.4節,「連接參數」

MyODBC Options Dialog

註釋: 在「驅動程式跟蹤」選項下列出的選項已被禁止(灰色),除非您使用的是驅動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節,「連接參數」

註釋: 如果您正在使用unixODBC,可使用下述工具設置DSN:

·         ODBCConfig GUI tool(HOWTO: ODBCConfig)

·         odbcinst

在某些情況下使用unixODBC,可能會出現下述錯誤:

Data source name not found and no default driver specified(數據源名不存在,未指定預設驅動程式)

如果出現該情況,請確認ODBCINIODBCSYSINI環境變數指向正確的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指定下述參數

參數

預設值

註釋

user

ODBC (on Windows)

用於連結至MySQL的帳號。

server

localhost

MySQL伺服器的主機名。

database

 

預設資料庫。

option

0

指定MyODBC工作方式的選項。參見下面。

port

3306

如果伺服器不是本地主機將要使用的TCP/IP端口。

stmt

 

連接至MySQL時將要執行的語句。

password

 

伺服器上用戶帳號的密碼。

socket

 

當伺服器是本地主機是將要連接的Unix套接字檔案或Windows命名管道。

選項參量用於通知MyODBC:客戶端不是100% ODBC兼容的。在Windows平台下,正常情況下,應通過切換連接屏幕上的復選框選擇選項,但也能在選項參量中選擇它們。下述選項是按照它們在MyODBC連接屏幕上顯示的順序排列的:

描述

1

客戶端無法處理,MyODBC返回列的實際寬度。

2

客戶端無法處理,MyODBC返回受影響行的真值。如果設置了該標誌,MySQL將返回「發現的行」取而代之。MySQL的版本必須是3.21.14或更高版本,該功能才能生效。

4

c:\myodbc.log中生成調試日誌。它與將MYSQL_DEBUG=d:t:O,c::\myodbc.log放到AUTOEXEC.BAT中的效果相同(在Unix平台下,該檔案是/tmp/myodbc.log)。

8

不為結果和參數設置任何訊息報限制。

16

即使驅動程式可能會給出提示,對出現的問題不予提示。

32

允許或禁止動態光標支援。(在MyODBC 2.50中不允許)。

64

db_name.tbl_name.col_name中忽略資料庫名的使用。

128

強制使用ODBC管理器光標(實驗性)。

256

禁止使用延伸取數據(實驗性)。

512

CHAR列填充為全列寬。

1024

SQLDescribeCol()返回完全合格的列名。

2048

使用壓縮客戶端/伺服器協議。

4096

通知伺服器忽略函數名之後和「(」之前的空格(PowerBuilder要求這樣)。這會使所有的函數名成為關鍵字。

8192

用命名管道連結至運行在NT環境下的mysqld伺服器。

16384

LONGLONG列更改為INT列(某些應用程式不能處理LONGLONG列)

32768

SQLTables返回作為Table_qualifierTable_owner的用戶(實驗性)。

65536

my.cnf的[client][odbc]組讀取參數。

131072

增加一些額外檢查(不應需要之,但)。

262144

禁止事務。

524288

允許將查詢記錄到c:\myodbc.sql(/tmp/myodbc.sql)檔案。(僅在調試模式下才能啟用)。

1048576

不要驅動中的結果進行緩衝處理,而應從伺服器讀取「mysql_use_result()」。僅對正向光標才能起作用。當您不希望緩衝處理整個結果集時,對於大資料表處理,該選項十分重要。

2097152

強制使用正向光標類型。在應用程式設置了預設靜態/動態光標類型的情況下,如果希望驅動程式使用非緩衝結果集,那麼該選項能夠保證正向光標的行為。

要想選擇多個選項,可將它們的值加在一起。例如,將選項設置為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取而代之。

在下面的資料表各中,給出了針對各種配置的推薦選項值:

配置

選項值

Microsoft Access

3

Microsoft Visual Basic

3

具有很多行的大資料表

2049

驅動跟蹤生成(調試模式)

4

查詢日誌生成(調試模式)

524288

生成驅動跟蹤和查詢日誌(調試模式)

524292

具有非緩衝結果的大資料表

3145731

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.6. 建立從系統A到系統B的遠程連接

如果您打算使用myusermypassword作為帳號和密碼從系統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用戶帳號管理」

在系統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下的連接」

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.

26.1.9.7. 獲取ODBC跟蹤檔案

如果遇到與MyODBC有關的困難或問題,首先應使用ODBC管理器和MyODBC生成一份日誌檔案(請求來自ODBC ADMIN的日誌時獲得的日誌檔案)。

要想通過驅動管理器獲得ODBC跟蹤檔案,可採取下述步驟:

·         打開ODBC數據源管理器:

1.    點擊「開始」,將指針指向「設置」,然後點擊「控制面板」。

2.    在運行Microsoft Windows 2000、XP或2003的計算機上,雙擊「管理工具」,然後雙擊「數據源」(ODBC),如下圖所示。

ODBC Data Sources
                  Icon

在運行早期Microsoft Windows版本的計算機上,雙擊「控制面板」中的32位ODBC或ODBC。

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

ODBC Data Source
                  Administrator Dialog

4.    點擊「幫助」以瞭解ODBC數據源管理器對話框各選項卡的詳細訊息。

·         啟用跟蹤選項 對於Windows和Unix平台,該步驟不同。

要想在Windows平台上啟用跟蹤選項:

1.    通過「ODBC數據源管理器」對話框的「跟蹤」選項卡,可對跟蹤ODBC函數的方式進行配置。

2.    從「跟蹤」選項卡激活了跟蹤功能後,驅動管理器會對後續運行的所有應用程式的ODBC函數使用進行跟蹤。

3.    激活跟蹤功能前所運行應用程式的ODBC函數使用不會被記錄。ODBC函數使用將被記錄在您指定的日誌檔案中。

4.    點擊「現在停止跟蹤」後,跟蹤功能將停止。請記住,啟動跟蹤功能後,日誌檔案將不斷增大,而且跟蹤功能會影響所有ODBC應用程式的性能。

ODBC Tracing
                  Tab

要想在Unix平台上啟用跟蹤選項:

5.    在Unix平台上,需要在ODBC.INI檔案中明確設置跟蹤選項。

使用TraceFile和odbc.ini中的Trace(跟蹤)參數打開或關閉跟蹤功能,如下所示:

TraceFile  = /tmp/odbc.trace
Trace      = 1

TraceFile指明了跟蹤檔案的名稱和完整路徑,將Trace(跟蹤)設為ONOFF。也可以使用「1」或「Yes」資料表示ON,以及「0」或「No」資料表示OFF。如果正在使用unixODBC的ODBCConfig,然後遵照HOWTO-ODBCConfig中介紹的關於跟蹤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\system32C:\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/)。

26.1.9.8. 用MyODBC測試的應用程式

使用下述應用程式測試了MyODBC:

如果您知道能夠與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/。它更正了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。它修正了某些情況下在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要想獲得正確的值,需要將該屬性設置為adUseClient,如下面給出的VB代碼示範所示:

Dim myconn As New ADODB.Connection
Dim myrs As New Recordset
Dim mySQL As String
Dim myrows As Long
 
myconn.Open "DSN=MyODBCsample"
mySQL = "SELECT * from user"
myrs.Source = mySQL
Set myrs.ActiveConnection = myconn
myrs.CursorLocation = adUseClient
myrs.Open
myrows = myrs.RecordCount
 
myrs.Close
myconn.Close

另一種處理方式是,對類似查詢使用SELECT COUNT(*)語句以獲取正確的行計數。

·         主動伺服器頁(ASP)

應選擇「返回匹配行」選項。

·         BDE應用程式

要想使這類應用程式工作,應選擇「不最佳化列寬度並返回匹配行」選項。

·         Borland Builder 4

開始查詢時,可使用Active屬性或Open方法。注意,Active將通過自動發出SELECT * FROM ...查詢開始。如果資料表很大,這不是什麼好事。

·         ColdFusion(在Unix平台上)

下述訊息取自ColdFusion文檔:

使用下述訊息來配置用於Linux的ColdFusion伺服器,以便使用針對MySQL數據源的unixODBC驅動和MyODBC。Allaire已證明,MyODBC 2.50.26能夠與MySQL 3.22.27以及用於Linux的ColdFusion一起工作。(任何較新的版本也應能正確工作)。您可以在網站http://dev.mysql.com/downloads/connector/odbc/上下載MyODBC。

通過ColdFusion 4.5.1版,可以使用「ColdFusion管理器」來新增MySQL數據源。但是,驅動程式未包含在ColdFusion 4.5.1版中。在MySQL驅動程式出現在ODBC數據源下拉列資料表之前,必須建立MyODBC驅動程式,並將其拷貝到/opt/coldfusion/lib/libmyodbc.so

在Contrib目錄下包含程式mydsn-xxx.zip,使用它,對於Coldfusion應用程式,可建立並刪除用於MyODBC驅動的DSN註冊檔案。

·         DataJunction

應對其進行更改,使之輸出VARCHAR而不是ENUM,因為其導出ENUM的方式會造成MySQL問題。

·         Excel

工作。一些提示:

o        如果遇到日期方面的問題,請使用CONCAT()函數,將其選擇為字串。例如:

o                     SELECT CONCAT(rise_time), CONCAT(set_time)
o                       FROM sunrise_sunset;

採用該方式以字串提取的值應能被Excel97正確識別為時間值。

在本例中,CONCAT()的目的是讓ODBC認為列是字串類型如果沒有CONCAT(),ODBC會將列視為時間類型,Excel無法理解它。

注意,Excel存在1個問題,這是因為它會自動將字串轉換為時間。如果源是文本檔案,不存在問題,但當源是通報各列準確類型的ODBC連接時,將出現問題。

·         Word

要想將數據從MySQL提取到Word/Excel文檔,需要使用MyODBC驅動程式以及「Microsoft查詢幫助」插件。

例如,用含有兩列文本的資料表建立1個資料庫:

o        使用mysql客戶端命令行工具插入行。

o        使用ODBC管理器建立1個DSN檔案,例如,針對剛建立資料庫的「my」。

o        打開Word應用程式。

o        建立1個新的空白文檔。

o        在資料庫工具欄上,按「插入資料庫」按鈕。

o        按「獲取數據」按鈕。

o        在「獲取數據」屏幕右側,按「Ms Query」按鈕。

o        在「Ms Query」中使用「my DSN」檔案建立1個新數據源。

o        選擇新查詢。

o        選擇打算使用的列。

o        如果願意,建立1個過濾器。

o        如果願意,建立1個分類。

o        選擇「將數據返回到Microsoft Word」。

o        點擊「完成」。

o        點擊「插入數據」並選擇記錄。

o        點擊OK,在您的Word文檔中將看到插入的行。

·         odbcadmin

ODBC的測試程式。

·         Delphi

必須使用BDE 3.2版或更新的版本。連接到MySQL時,選擇「不最佳化列寬度」選項。

此外,這裡給出了一些可能有用的Delphi代碼,這些代碼可設置為MyODBC設置ODBC條目和BDE條目。BDE條目要求用到「BDE別名編輯器」,它位於靠近您的「Delphi Super Page」上,可自由拖動。(下述內容由Bryan Brunton <bryan@flesherfab.com>提供):

fReg:= TRegistry.Create;
fReg.OpenKey('\Software\ODBC\ODBC.INI\DocumentsFab', True);
fReg.WriteString('Database', 'Documents');
fReg.WriteString('Description', ' ');
fReg.WriteString('Driver', 'C:\WINNT\System32\myodbc.dll');
fReg.WriteString('Flag', '1');
fReg.WriteString('Password', '');
fReg.WriteString('Port', ' ');
fReg.WriteString('Server', 'xmark');
fReg.WriteString('User', 'winuser');
fReg.OpenKey('\Software\ODBC\ODBC.INI\ODBC Data Sources', True);
fReg.WriteString('DocumentsFab', 'MySQL');
fReg.CloseKey;
fReg.Free;
 
Memo1.Lines.Add('DATABASE NAME=');
Memo1.Lines.Add('USER NAME=');
Memo1.Lines.Add('ODBC DSN=DocumentsFab');
Memo1.Lines.Add('OPEN MODE=READ/WRITE');
Memo1.Lines.Add('BATCH COUNT=200');
Memo1.Lines.Add('LANGDRIVER=');
Memo1.Lines.Add('MAX ROWS=-1');
Memo1.Lines.Add('SCHEMA CACHE DIR=');
Memo1.Lines.Add('SCHEMA CACHE SIZE=8');
Memo1.Lines.Add('SCHEMA CACHE TIME=-1');
Memo1.Lines.Add('SQLPASSTHRU MODE=SHARED AUTOCOMMIT');
Memo1.Lines.Add('SQLQRYMODE=');
Memo1.Lines.Add('ENABLE SCHEMA CACHE=FALSE');
Memo1.Lines.Add('ENABLE BCD=FALSE');
Memo1.Lines.Add('ROWSET SIZE=20');
Memo1.Lines.Add('BLOBS TO CACHE=64');
Memo1.Lines.Add('BLOB SIZE=32');
 
AliasEditor.Add('DocumentsFab','MySQL',Memo1.Lines);

·         C++ Builder

用BDE 3.0版進行了測試。目前已知的唯一問題是,更改資料表方案時,查詢字段不更新。然而,BDE看上去不會識別主鍵,它僅是名為PRIMARY的索引,儘管這談不上是問題。

·         Vision

應選擇「返回匹配行」選項。

·         Visual Basic

要想更新資料表,必須為資料表定義主鍵。

帶有ADO的Visual Basic不能處理大整數。這意味著某些查詢(如SHOW PROCESSLIST等)不會正確工作。更正方法是,在ODBC連接字串中使用OPTION=16384,或在MyODBC連接屏幕上選擇「將BIGINT列更改為INT」選項。或許,您也希望選擇「返回匹配行」選項。

·         VisualInterDev

如果在結果中有BIGINT,可能會出現錯誤[Microsoft][ODBC Driver Manager]驅動程式不支持該參數。請MyODBC連接屏幕上選擇「將BIGINT列更改為INT」選項。

·         Visual Objects

應選擇「不最佳化列寬度」選項。

·         MS Visio Enterprise 2000

通過MyODBC(2.50.37或更高版本),通過連接MS Vision Enterprise 2000和MySQL,並使用Visio的逆向工程師功能,我們建立了資料庫模型,使用它來檢索關於DB的訊息(Visio顯示了所有的列定義、主鍵、索引等)。此外,我們還通過指定Visio中的新資料表進行了測試,並通過MyODBC將其導出至MySQL。

26.1.10. 與MyODBC連接相關的事宜

在本節中,回答了與MyODBC連接有關的問題。

26.1.10.1. 配置MyODBC DSN時,出現不能加載翻譯器或設置庫錯誤

更多訊息,請參見MS知識庫文章(Q260558)。此外,請確認在您的系統目錄下有最新的有效ctl3d32.dll檔案。

26.1.10.2.&n