第26章:连接器

目录 返回MySQL 5.1参考手册

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. 连接时,出现拒绝访问错误

请参见5.7.8节,“拒绝访问错误的原因

26.1.10.3. INFO:关于ODBC连接池

关于连接池方面的信息,请参阅下述文档: http://support.microsoft.com/default.aspx?scid=kb;EN-US;q169470

26.1.11. MyODBC和Microsoft Access

在本节中,回答了与MyODBC和Microsoft Access有关的问题。

26.1.11.1. 如何设置Microsoft Access,使之能够与使用MyODBC的MySQL一起工作?

要想使Microsoft Access能够与MyODBC一起工作,在你的客户端PC上必须完成下述操作。

1.    如果你正在使用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或更高版本以解决该问题。

2.    安装最新版MySQL,http://dev.mysql.com/downloads/

3.    安装最新版MyODBC 3.51或2.50,http://dev.mysql.com/downloads/connector/odbc/

4.    对于所有版本的Access,应启用“MyODBC返回匹配行”选项。

5.    通过MyODBC,将Access用作MySQL服务器的前端程序。

26.1.11.2. 如何将表或查询从Access导出到MySQL?

除非已安装了MyODBC,否则不能将表或查询导出到MySQL。

要想将表从Access导入MySQL,请遵循下述说明:

1.    打开Access数据库或Access项目时,出现“数据库”窗口。其中显示了用于创建新数据库对象和打开已有对象的快捷方式。

Access Database

2.    点击打算导出的表名或查询名,然后在“文件”菜单中选择“导出”。

3.    在“导出对象类型对象名”对话框中,在“另存为类型”框中,选择ODBC数据库(),如下图所示

Selecting an ODBC Database

4.    在“导出”对话框中,输入文件名(或使用建议的文件名),然后选择OK。

5.    显示“选择数据源”对话框,其中列出了为计算机上已安装的各ODBC驱动定义的数据源。点击“文件数据源”或“机器数据源”选项卡,然后双击打算导出至的MyODBC或MyODBC 3.51数据源。关于为MyODBC定义新数据源的方法,请参见26.1.9.2节,“在Windows上配置MyODBC DSN”

Microsoft Access通过该数据源连接至MySQL服务器,并导出新的表和/或数据。

26.1.11.3. 如何导入MySQL数据库表或将其链接到Access?

除非已安装了MyODBC,否则不能将表或查询导出到MySQL数据库。

要想将表从MySQL导入或链接到Access,请采取下述步骤:

1.    打开数据库,或切换到“数据库”窗口以打开数据库。

2.    要想导入表,在“文件”菜单上,将鼠标指针指向“获取外部数据”,然后点击“导入”。要想链接表,在“文件”菜单上,将鼠标指针指向“获取外部数据”,然后点击“链接表”。

3.    在“导入”(或“链接”)对话框中,在“文件类型”框中选择“ODBC Databases ()”。在“选择数据源”对话框中,列出了定义的数据源。显示“选择数据源”对话框,其中列出了为安装在计算机上的任何ODBC驱动定义的数据源。点击“文件数据源”或“机器数据源”选项卡,然后双击打算导出至的MyODBC或MyODBC 3.51数据源。关于为MyODBC或MyODBC 3.51驱动定义新数据源的方法,请参见26.1.9.2节,“在Windows上配置MyODBC DSN”

4.    如果所选的数据源要求登录,请输入登录ID和密码(可能还需要额外信息),然后点击OK。

5.    Microsoft Access通过ODBC数据源连接到MySQL服务器,并显示可导入或链接的表清单。

6.    点击希望导入或链接的每个表,然后点击OK。如果你正在链接1个表,但它没有唯一识别各条记录的索引,Microsoft Access将显示链接表中的字段列表。点击能唯一标识各记录的字段或字段组合,然后点击OK。

26.1.11.4. 链接表的结构或位置已改变,我能看到链接表中的这些变化吗?

是。当链接表的结构或位置发生变化时,可采取下述步骤查看或刷新链接。“链接表管理器”列出了当前链接的所有表的路径。

要想查看或刷新链接:

1.    打开包含表链接的数据库。

2.    在“工具”菜单上,指向“加载项”(在Access 2000或更新版本中为“数据库实用工具”),然后点击“链接表管理器”。

3.    选中打算刷新链接的表的复选框。

4.    点击OK,刷新链接。

Microsoft Access将确认成功的刷新操作,或者,如果未找到表,将显示“选择<table name>新位置”对话框,在该对话框中,可指定表的新位置。如果你所选择的数个表已被移至你所指定的新位置,链接表管理器将针对所有所选的表搜索该位置,并一次性地更新所有链接。

要想更改链接表集合的路径:

1.    打开包含表链接的数据库。

2.    在“工具”菜单上,指向“加载项”(在Access 2000或更新版本中为“数据库实用工具”),然后点击“链接表管理器”。

3.    选中“对新位置始终提示”复选框。

4.    选中打算更改链接的表的复选框,然后点击OK。

5.    在“选择<table name>新位置”对话框中,指定新位置,点击“打开”,然后点击OK。

26.1.11.5. 当我在链接表中插入记录或更新其中的记录时,遇到“#DELETED#”

如果在Access中插入或更新的记录显示为“#DELETED#”:

·         如果你正在使用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或更高版本以解决该问题。

·         对于所有版本的Access,应启用“MyODBC返回匹配行”选项。对于Access 2.0,还应额外启用“模拟ODBC 1.0选项

·         在希望能够更新的所有表中,均应有时间戳。为了获得最大的可移植性,在列声明中不要使用长度规范。也就是说,应使用TIMESTAMP,而不是TIMESTAMP(n), n < 14。

·         在表中应有1个主键。如不然,新的或更新的行可能会显示为“#DELETED#”。

·         仅应使用DOUBLE浮点字段。与单精度浮点进行比较时,Access将失败。其征兆是新的或更新的行可能会显示为“#DELETED#”,或无法找到或更新行。

·         如果你正使用MyODBC来链接到有BIGINT列的表,结果会显示为“#DELETED”。排除它的解决方案是:

o        有1个以TIMESTAMP作为数据类型的虚拟列。

o        在“ODBC DSN管理器”的连接对话框中选择“将BIGINT列更改为INT”选项。

o        删除与Access的表链接,并重新创建它。

旧记录仍将显示为“#DELETED#”,但新增/更新的记录会恰当显示。

26.1.11.6. 如何处理写冲突或行位置错误?

如果看到下述错误,请在“DSN配置”对话框中选择“返回匹配行”选项,或将连接参数指定为“OPTION=2
写冲突。另一用户更改了你的数据。
 
无法找到需更新行的位置。自上次读取操作以来,某些值可能已被改变。

26.1.11.7. 无论何时,当我从Access 97导出表时,出现陌生的语法错误

对于Access 97,这是件奇怪的事宜,但在Access 2000