ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
### 第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个组件上,如下图所示: ![MyODBC Architecture](https://box.kancloud.cn/2015-07-10_559fc76c9b7b3.png) ·         **应用程序:** 应用程序指的是通过调用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 Data Sources Icon](https://box.kancloud.cn/2015-07-10_559fc76cb68a3.png) 打开ODBC数据源管理器对话框,如下图所示: ![ODBC Data Source Administrator Dialog](https://box.kancloud.cn/2015-07-10_559fc76cc3847.png) 点击“帮助”以了解ODBC数据源管理器对话框各选项卡的详细信息。 要想在Windows平台上添加数据源: 1.    打开ODBC数据源管理器。 2.    在ODBC数据源管理器对话框中,点击“添加”。打开“创建新数据源”对话框。 3.    选择MySQL ODBC 3.51驱动程序,然后点击“完成”。打开“MySQL ODBC 3.51驱动程序-DSN配置”对话框,如下图所示: ![MySQL ODBC DSN Configuration Dialog](https://box.kancloud.cn/2015-07-10_559fc76cf1dab.png) 4.    在“数据源名”框中,输入打算访问的数据源的名称。它可以是你选择的任何有效名称。 5.    在“描述”框中,输入DSn所需的描述信息。 6.    在“主机”或“服务器名”(或IP)框中,输入准备访问的MySQL服务器主机的名称。默认情况下为localhost(本地主机)。 7.    在“数据库名”框中,输入准备用作默认数据库的MySQL数据库名称。 8.    在“用户”框中,输入你的MySQL用户名(数据库用户ID)。 9.    在“密码”框中输入密码。 10.在“端口”框中,如果端口不是默认端口,输入端口号。 11.在“SQL命令”框中,可输入建立连接后自动执行的SQL语句。 最后,对话框与下图显示的类似: ![Filled-In MySQL ODBC DSN Configuration Dialog](https://box.kancloud.cn/2015-07-10_559fc76d09360.png) 点击“OK”添加该数据源。 **注释: ** 点击“OK”后,将打开“数据源”对话框,ODBC管理器将更新注册信息。连接到该数据源时,你所输入的用户名和连接字符串将成为该数据源的默认连接值。 你也可以使用“测试数据源”按钮,测试你的设置是否适合于连接到服务器。该特性仅对MyODBC 3.51驱动程序有效。成功完成测试后,将显示下述窗口: ![MyODBC Successful Connection Message](https://box.kancloud.cn/2015-07-10_559fc76d1c575.png) 如果测试失败,将显示错误消息。 ![MyODBC Failed Connection Message](https://box.kancloud.cn/2015-07-10_559fc76d2b88d.png) DNS配置对话框也有一个“选项”按钮。如果选择了它,将打开下述选项对话框,显示控制驱动程序的行为。关于这些选项的含义,请参见[26.1.9.4节,“连接参数”](# "26.1.9.4. Connection Parameters")。 ![MyODBC Options Dialog](https://box.kancloud.cn/2015-07-10_559fc76d35fa8.png) 注释: 在“驱动程序跟踪”选项下列出的选项已被禁止(灰色),除非你使用的是驱动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),如下图所示。 ![ODBC Data Sources Icon](https://box.kancloud.cn/2015-07-10_559fc76d45940.png) 在运行早期Microsoft Windows版本的计算机上,双击“控制面板”中的32位ODBC或ODBC。 3.    打开ODBC数据源管理器对话框,如下图所示: ![ODBC Data Source Administrator Dialog](https://box.kancloud.cn/2015-07-10_559fc76d4e624.png) 4.    点击“帮助”以了解ODBC数据源管理器对话框各选项卡的详细信息。 ·         启用跟踪选项 对于Windows和Unix平台,该步骤不同。 要想在Windows平台上启用跟踪选项: 1.    通过“ODBC数据源管理器”对话框的“跟踪”选项卡,可对跟踪ODBC函数的方式进行配置。 2.    从“跟踪”选项卡激活了跟踪功能后,驱动管理器会对后续运行的所有应用程序的ODBC函数调用进行跟踪。 3.    激活跟踪功能前所运行应用程序的ODBC函数调用不会被记录。ODBC函数调用将被记录在你指定的日志文件中。 4.    点击“现在停止跟踪”后,跟踪功能将停止。请记住,启动跟踪功能后,日志文件将不断增大,而且跟踪功能会影响所有ODBC应用程序的性能。 ![ODBC Tracing Tab](https://box.kancloud.cn/2015-07-10_559fc76d898d9.png) 要想在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”