Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103728514
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Mysql/postgreSQL

2008-05-12 15:14:38

在本章中,介绍了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的更多信息,请参阅。

对于本参考的应用程序开发部分,假定用户在C语言方面有着良好的实践知识,对DBMS有一般了解,最后,还应熟悉MySQL。关于MySQL功能及其语法的更多信息,请参阅http://dev.mysql.com/doc/

如果你的问题未能在本文档中得到解答,请发送电子邮件至

26.1.1. MyODBC介绍

26.1.1.1. 什么是ODBC?

ODBC(开放式数据库连接性)为客户端程序提供了访问众多数据库或数据源的一种方式。ODBC是标准化的API,允许与SQL数据库服务器进行连接。它是根据SQL Access Group的规范开发的,它定义了一套函数调用、错误代码和数据类型,可将其用于开发独立于数据库的应用程序。通常情况下,当需要数据库独立或需要同时访问不同的数据源时,将用到ODBC。

关于ODBC的更多信息,请参阅。

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的更多信息,请访问。

关于许可的更多信息,请访问。

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贡献二进制代码,方式是发送邮件至,这样其他用户就能使用你贡献的内容。

26.1.1.7. MyODBC邮件列表

MySQL AB通过其邮件列表为用户社区提供帮助。对于与MyODBC有关的事宜,可使用邮件列表,从有经验的用户处获得帮助。

关于订阅MySQL邮件列表或浏览列表档案的更多信息,请访问。

其中,关注程度最高的是论坛MySQL连接器部分的ODBC论坛。

26.1.1.8. MyODBC论坛

通过MySQL论坛(位于),可获得有经验用户的支持和帮助。

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文件(阐明问题)的档案。你可以将该档案文件发送至。只有位于MySQL AB的我们才能访问你上传的文件,而且我们会十分谨慎地对待这类数据。

如果你创建了仍出现问题的程序,请将该程序也包含在档案文件中。

如果程序能够与某些其他SQL服务器一起工作,档案中还应包含在这类其他SQL服务器下工作的ODBC日志文件。

请记住,你提供给我们的信息越多,我们更正问题的机会就越大。

26.1.1.10. 如何提交MyODBC补丁

你可以通过电子邮件,就已有代码或问题发送补丁或提出更好的解决方案:

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的更多信息,请参阅。

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),

·         unixODBC Unix驱动管理器(libodbc.so),。

·         iODBC ODBC Unix驱动管理器(libiodbc.so),。

从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:。

·         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的完整用法,请参见。

·         如果你正在使用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或更高版本()

o        unixodbc Alpha 3或更高版本()

·         如果使用了未编译在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

如果出现错误,更正后,继续执行创建进程。如果无法创建,请发送详细的电子邮件至,以获取进一步帮助。

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://替换bk://。例如:

shell> bk clone  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阶段,但并未编译分发版本,请将其通报给

12.启动了bk clone操作获得源码树后,应定期运行bk pull进行更新。

13.可以使用“bk sccstool”检查树的变更史。如果你发现了有趣的差异,并对代码存在一问,请立刻发送电子邮件至

此外,如果你认为有更好的主意,请发送电子邮件至相同的地址并附上补丁。更改了源码后,使用“bk diffs”可生成补丁。如果你没有时间就你的观点编写代码,可发送描述性信息。

14.BitKeeper具有一个可通过bk helptool访问的帮助工具。

通过浏览,也能在线浏览变化集、注释和源代码。

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()

·         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日志,并根据日志给出的错误信息采取进一步的步骤。如果需要进一步帮助,请发送详细的电子邮件至

在下述站点,你可以找到关于如何完成该操作的简单示例:.

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,然后遵照中介绍的关于跟踪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跟踪文件,找出可能出错的地方。

如果发现某些事项出错,请发送电子邮件至(或,如果有与MySQL AB签订的支持合同),简要描述出现的问题,并提供下述额外信息:

o        MyODBC版本

o        ODBC驱动管理器的类型和版本

o        MySQL服务器的版本

o        驱动管理器的ODBC跟踪

o        来自MyODBC驱动的MyODBC日志文件

o        简单的可复制示例

请记住,你提供给我们的信息越多,我们更正问题的机会就越大。

此外,在提供缺陷信息前,请检查MyODBC邮件列表()。

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), . .

  • 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()

  • SQLExpress for Xbase++()

  • Open Office () . .

  • Star Office ()

  • G2-ODBC bridge ()

  • Sambar Server () .

如果你知道能够与MyODBC一起工作的其他应用程序,请以电子邮件的方式指明它:

26.1.9.9. 已知的能与MyODBC一起工作的程序

大多数程序均能与MyODBC一起工作,对上面所列的每一程序,我们自己进行了测试,或得到用户的确认。很多介绍中均给出了你可能会遇到问题的描述。

·         程序

注释

·         Access

要想使Access工作:

o        如果你正在使用Access 2000,应从下述地址获取并安装最新的(2.6版或更高)Microsoft MDAC(Microsoft数据访问组件),。它更正了Access在将数据导出至MySQL时存在的一个缺陷,未指定表名和列名。另一种解决该缺陷的方法是,升级到MyODBC 2.50.33和MySQL 3.23.x, 它们共同提供了避免该问题的一种方式。

此外,你还应获取并应用Microsoft Jet 4.0 Service Pack 5 (SP5),可在下述地址找到它:。它修正了某些情况下在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 <>提供):

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');
Mem
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时,出现不能加载翻译器或设置库错误

更多信息,请参见。此外,请确认在你的系统目录下有最新的有效ctl3d32.dll文件。

26.1.10.2. 连接时,出现拒绝访问错误

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

26.1.10.3. INFO:关于ODBC连接池

关于连接池方面的信息,请参阅下述文档:

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数据访问组件),。它更正了Access在将数据导出至MySQL时存在的一个缺陷,未指定表名和列名。另一种解决该缺陷的方法是,升级到MyODBC 2.50.33和MySQL 3.23.x, 它们共同提供了避免该问题的一种方式。

此外,你还应获取并应用Microsoft Jet 4.0 Service Pack 5 (SP5),可在下述地址找到它:。它修正了某些情况下在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将确认成功的刷新操作,或者,如果未找到表,将显示“选择

新位置”对话框,在该对话框中,可指定表的新位置。如果你所选择的数个表已被移至你所指定的新位置,链接表管理器将针对所有所选的表搜索该位置,并一次性地更新所有链接。

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

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

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

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

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

5.    在“选择

新位置”对话框中,指定新位置,点击“打开”,然后点击OK。

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

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

·         如果你正在使用Access 2000,应从下述地址获取并安装最新的(2.6版或更高)Microsoft MDAC(Microsoft数据访问组件),。它更正了Access在将数据导出至MySQL时存在的一个缺陷,未指定表名和列名。另一种解决该缺陷的方法是,升级到MyODBC 2.50.33和MySQL 3.23.x, 它们共同提供了避免该问题的一种方式。

此外,你还应获取并应用Microsoft Jet 4.0 Service Pack 5 (SP5),可在下述地址找到它:。它修正了某些情况下在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或2002中并未出现。将MyODBC升级至MyODBC 3.51.02或以上,可以克服该问题。

26.1.11.8. 编辑记录时,Access返回“另一用户更改了你修改的记录”

对于某些程序,可能会出现该错误: 另一用户更改了你所修改的记录。在大多数情况下,可通过下述措施解决该问题:

·         如果主键不存在,为表添加1个主键。

·         如果时间戳不存在,添加1个时间戳列。

·         仅应使用DOUBLE浮点字段。与单精度浮点值比较时,某些程序会出错。

如果这些措施未能解决问题,首先应从ODBC管理器生成1个日志文件(请求来自ODBC ADMIN的日志时获得的日志文件),以及1个MyODBC日志,使用它们找出出错的原因。具体介绍,请参见26.1.9.7节,“获取ODBC跟踪文件”

26.1.11.9. 如何在Access中俘获ODBC登录错误消息?

请阅读“如何在Access中俘获ODBC登录错误消息”,

26.1.11.10. 如何优化Access与MyODBC一起工作的性能?

·        

·        

·        

26.1.11.11. 我有很长的表,MyODBC访问这些Access表的最佳配置是什么?

如果在Access中有很大(长)的表,可能需要相当长的时间才能打开。或者,也可能是虚拟内存较低的情况下运行,最终导致ODBC查询失败错误,并无法打开表。为了解决该问题,可选择下述选项:

·         返回匹配行(2)

·         允许BIG结果(8)

这样可将值增加到10(OPTION=10)。

26.1.11.12. 如何为ODBC连接设置QueryTimeout值?

请参阅“为ODBC连接设置QueryTimeout值”,

26.1.11.13. INFO:用于Access和MySQL间导入/导出的工具

关于可用工具列表,请参阅一节。

26.1.12. MyODBC和Microsoft VBA及ASP

在本节中,回答了与Microsoft Visual Basic(ADO, DAO & RDO)和ASP一起使用MyODBC有关的问题。

26.1.12.1. 为什么SELECT COUNT(*) FROM tbl_name返回错误?

这是因为COUNT(*)表达式返回了1个BIGINT,ADO不理解这个大值的含义。选择“将BIGINT列更改为INT选项(选项值16384)。

26.1.12.2. 无论何时,当我使用AppendChunk()或GetChunk() ADO方法时,遇到错误“多步操作导致错误,请检查每个状态值”

将光标位置指定为adUseServer时,ADO的GetChunk()AppendChunk()方法不能按预期的方式工作。从另一方面上讲,可使用adUseClient克服该问题。

上给出了一个简单示例。

26.1.12.3. 在ADO中如何发现受特定SQL语句影响的总行数?

在ADO执行方法中使用RecordsAffected属性。关于使用执行方法的更多信息,请参见http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmthcnnexecute.asp

26.1.12.4. 在Visual Basic中如何处理Blob数据?

下面给出了Mike Hillyer()写的一篇好文章,其中解释了如何在ADO中通过MyODBC插入数据和/或从Blob列获取数据的方法。

26.1.12.5. 如何将Visual Basic的数据类型映射到MySQL类型?

下面给出了Mike Hillyer()的另一篇好文章。

26.1.12.6. 示例:VB与ADO、DAO和RDO

下面给出了ADO、DAO和RDO与VB一起使用的用法示例:

·         ADO示例: 26.1.19节,“MyODBC与VB:ADO、DAO和RDO”

·         DAO示例: 26.1.19节,“MyODBC与VB:ADO、DAO和RDO”

·         RDO示例: 26.1.19节,“MyODBC与VB:ADO、DAO和RDO”

如果你有其他好的例子,或关于ADO/DAO/RDO的基本知识,请将详情发送至

26.1.12.7. ASP和MySQL以及MyODBC

关于如何使用MyODBC通过ASP访问MySQL的更多信息,请参阅下述文章:

·         使用MyODBC通过ASP访问你的MySQL数据库

·        

中,给出了关于ASP的常见问题清单。

26.1.12.8. INFO:关于ActiveX数据对象(ADO)的常见问题

更多信息,请参见

26.1.13. MyODBC和第三方ODBC工具

在本节中,回答了与MyODBC和各种ODBC相关工具有关的问题,如Microsoft Word、Excel和ColdFusion。

26.1.13.1. 如何将数据从MySQL提取到MS-Word/Excel文档?

要想将数据从MySQL提取到Word/Excel文档,需要使用MyODBC驱动程序以及“Microsoft查询帮助”插件。

例如,用含有两列文本的表创建1个数据库:

·         使用mysql客户端命令行工具插入行。

·         使用ODBC管理器创建1个DSN文件,例如,针对刚创建数据库的“my”。

·         打开Word应用程序。

·         创建1个新的空白文档。

·         在数据库工具栏上,按“插入数据库”按钮。

·         按“获取数据”按钮。

·         在“获取数据”屏幕右侧,按“Ms Query”按钮。

·         在“Ms Query”中使用“my DSN”文件创建1个新数据源。

·         选择新查询。

·         选择打算使用的列。

·         如果愿意,创建1个过滤器。

·         如果愿意,创建1个分类。

·         选择“将数据返回到Microsoft Word”。

·         点击“完成”。

·         点击“插入数据”并选择记录。

·         点击OK,在你的Word文档中将看到插入的行。

26.1.13.2. 使用MyODBC将表从MS DTS导出到MySQL时出现语法错误

这与当表由TEXT或VARCHAR数据类型构成时Access 97遇到的问题类似。通过将MyODBC驱动升级到3.51.02或更高版本,即可排除该错误。

26.1.13.3. 如何在Solaris平台上配置MySQL+MyODBC+unixODBC+ColdFusion

请参见

26.1.14. MyODBC通用功能

在本节中,回答了与MyODBC一般功能有关的问题。

26.1.14.1. 如何在ODBC中获取AUTO_INCREMENT列的值

一个常见问题是,如何获取从INSERT语句自动生成的ID的值。使用ODBC,你可以作与以下示例类似的任何事(假定“auto”为AUTO_INCREMENT字段):

INSERT INTO tbl (auto,text) VALUES(NULL,'text');
SELECT LAST_INSERT_ID();

或者,如果你仅打算将ID插入到另一表中,你可以:

INSERT INTO tbl (auto,text) VALUES(NULL,'text');
INSERT INTO tbl2 (id,text) VALUES(LAST_INSERT_ID(),'text');

请参见25.2.13.3节,“如何获得上次插入行的唯一ID”

为了使某些ODBC应用程序(至少是Delphi和Access)获得更好的性能,可使用下述查询来找到新插入的行:

SELECT * FROM tbl WHERE auto IS NULL;

26.1.14.2. MyODBC支持动态光标类型吗?

是。MyODBC 3.51支持动态光标类型以及正向和静态特性。

由于性能方面的原因,在默认情况下,驱动程序不支持该特性。你可以启用该特性,方法是,将连接选项标志指定为“OPTION=32,或在DSN配置中选中“启用动态光标”选项。

26.1.14.3. 导致事务无法启用错误的原因是什么?

当应用程序发出事务调用,但底层MySQL服务器不支持事务或禁止事务时,驱动程序将返回该错误。

为了避免该问题,必须使用启用了InnoDBBDB存储引擎(或两者)的服务器,并使用这类表。从4.0版以后,默认情况下,MySQL服务器均支持InnoDB。在BDB可用的平台上,MySQL-Max服务器也支持BDB

此外,如果你的服务器支持事务表类型(InnoDB和BDB),请确保在DSN配置中未设置“禁止事务”选项。

26.1.14.4. 导致无法找到光标错误的原因是什么?

这是因为应用程序正在使用旧的MyODBC 2.50版本,不能通过SQLSetCursorName明确设置光标名称。更正它的方法是升级到MyODBC 3.51版。

26.1.14.5. 我能与MyODBC 3.51一起使用MyODBC 2.50应用程序吗?

是。如果你发现不能与MyODBC 3.51一起工作,但能与MyODBC 2.50一起工作的任何事项,请发送电子邮件至

26.1.14.6. 我能使用MyODBC从.NET环境访问MySQL吗?

是。你可以使用odbc.net,通过MyODBC连接到MySQL。这里给出了一些从VC.NET和VB.NET连接到MySQL的基本示例。

·         请参见26.1.20.1节,“ODBC.NET: CSHARP(C#)”

·         请参见26.1.20.2节,“ODBC.NET: VB”

这里给出了Venu(MyODBC开发人员)撰写的另一篇好文章,其中,给出了所有的MySQL .NET接口以及一些有用的例子。

注意: 在与MyODBC一起使用ODBC.NET的过程中,在获取空字符串的同时(长度为0),将给出SQL_NO_DATA异常。从站点,可获取针对它的补丁。

26.1.14.7. MyODBC的性能为什么很差,对于相对较小的查询也会导致大量的磁盘动作?

MyODBC比其他ODBC驱动程序快很多。缓慢可能是因未使用下述选项造成的:

·         打开“ODBC跟踪”选项。遵循给出的指示说明,交叉检查是否未启用该选项。

ODBC Tracing
              Tab

如上图所示,“ODBC数据源管理器”“跟踪”选项卡的“何时跟踪”选项应始终指向“现在开始跟踪”,而不是“现在停止跟踪”。

·         使用了驱动程序的调试版本。如果你正在使用驱动DLL的调试版本,也会使查询处理变慢。你可以执行交叉检查,通过驱动DLL属性(在系统目录下,右击驱动DLL并点击“属性”)的“注释”区,检查DLL是否是调试版或发布版,如下图所示:

DLL Properties Dialog

·         启用了“驱动跟踪和查询日志”。即使你打算使用驱动程序的调试版(在生产环境下总应使用发布版),也应确保禁止了“驱动跟踪和查询日志”选项(OPTION=4,524288),如下图所示:

MyODBC Options Dialog

26.1.15. 基本的MyODBC应用步骤

从MyODBC应用程序执行的与MySQL服务器的交互包含以下操作:

·         配置MyODBC DSN。

·         连接到MySQL服务器。

·         初始化操作。

·         执行SQL语句。

·         检索结果。

·         执行事务。

·         断开与服务器的连接。

大多数应用程序均使用了这些步骤的某些变体。在下图中,给出了基本的应用步骤:

MyODBC Programming Flowchart
阅读(952) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~