### 第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”
- 前言
- 1. 一般信息
- 2. 安装MySQL
- 3. 教程
- 4. MySQL程序概述
- 5. 数据库管理
- 6. MySQL中的复制
- 7. 优化
- 8. 客户端和实用工具程序
- 9. 语言结构
- 10. 字符集支持
- 11. 列类型
- 12. 函数和操作符
- 13. SQL语句语法
- 14. 插件式存储引擎体系结构
- 15. 存储引擎和表类型
- 16. 编写自定义存储引擎
- 17. MySQL簇
- 18. 分区
- 19. MySQL中的空间扩展
- 20. 存储程序和函数
- 21. 触发程序
- 22. 视图
- 23. INFORMATION_SCHEMA信息数据库
- 24. 精度数学
- 25. API和库
- 26. 连接器
- 27. 扩展MySQL
- A. 问题和常见错误
- B. 错误代码和消息
- C. 感谢
- D. MySQL变更史
- E. 移植到其他系统
- F. 环境变量
- G. MySQL正则表达式
- H. MySQL中的限制
- I. 特性限制
- J. GNU通用公共许可
- K. MySQL FLOSS许可例外
- 索引