以下部分详细介绍了一些常见错误及其建议的修复或替代解决方案。如果您仍然遇到问题,请使用连接器/ODBC 邮件列表;请参阅 第 9.1 节,“连接器/ODBC 社区支持”。
许多问题可以通过将您的连接器/ODBC 驱动程序升级到最新的可用版本来解决。在 Windows 上,确保安装了最新版本的 Microsoft 数据访问组件 (MDAC)。
64 位 Windows 和 ODBC 数据源管理器
我在 Windows XP x64 Edition 或 Windows Server 2003 R2 x64 上安装了连接器/ODBC。安装成功完成,但连接器/ODBC 驱动程序未出现在ODBC Data Source
Administrator
.
这不是错误,而是与 Windows x64 版本使用 ODBC 驱动程序的方式有关。在 Windows x64 版本上,连接器/ODBC 驱动程序安装在该
%SystemRoot%\SysWOW64
文件夹中。但是,通过 Windows x64 版本或在 Windows x64 版本ODBC Data Source Administrator
中可用的默认设置位于该
文件夹中,并且仅在该文件夹中搜索 ODBC 驱动程序。
Administrative
Tools
Control Panel
%SystemRoot%\system32
在 Windows x64 版本上,使用位于 的 ODBC 管理工具
%SystemRoot%\SysWOW64\odbcad32.exe
,这将正确定位已安装的连接器/ODBC 驱动程序并使您能够创建连接器/ODBC DSN。
此问题最初被报告为 Bug #20301。
错误 10061(无法连接到服务器)
连接或使用测试按钮时ODBC Data Source Administrator
出现错误 10061(无法连接到服务器)
此错误可能由许多不同的问题引起,包括服务器问题、网络问题以及防火墙和端口阻塞问题。有关详细信息,请参阅 无法连接到 [本地] MySQL 服务器。
“交易未启用”错误
使用事务报如下错误:
Transactions are not enabled
此错误表明您正在尝试对
不支持事务的 MySQL 表使用事务。使用数据库引擎时,MySQL 支持事务
InnoDB
,这是 MySQL 5.5 及更高版本中的默认存储引擎。在 MySQL 5.1 之前的 MySQL 版本中,您也可以使用该
BDB
引擎。
在继续之前检查以下内容:
确认您的 MySQL 服务器支持事务数据库引擎。用于
SHOW ENGINES
获取可用引擎类型的列表。验证您正在更新的表是否使用事务数据库引擎。
确保您没有
disable transactions
在 DSN 中启用该选项。
#DELETED# Access 报告的记录
#DELETED#
在链接表中插入或更新记录时
访问报告记录。
如果插入或更新的记录
#DELETED#
在 Access 中显示为,则:
-
如果您使用的是 Access 2000,请
Microsoft Data Access Components
从 https://www.microsoft.com/en-in/download/details.aspx?id=21995获取并安装最新的(2.6 版或更高版本)Microsoft MDAC ( ) 。这修复了 Access 中的一个错误,即当您将数据导出到 MySQL 时,未指定表名和列名。此外,获取并应用 Microsoft Jet 4.0 Service Pack 5 (SP5),它可以在 http://support.microsoft.com/default.aspx?scid=kb;EN-US;q239114找到。
#DELETED#
这修复了列被标记为在 Access 中 的某些情况 。 对于所有版本的 Access,启用连接器/ODBC
Return matching rows
选项。对于 Access 2.0,还启用该Simulate ODBC 1.0
选项。TIMESTAMP
在您希望能够更新的所有表中 包含一个。在表中包含一个主键。否则,新的或更新的行可能显示为
#DELETED#
。仅使用
DOUBLE
浮动字段。与单精度浮点数比较时访问失败。症状通常是新的或更新的行可能显示为,#DELETED#
或者您无法找到或更新行。-
如果您使用连接器/ODBC 链接到具有
BIGINT
列的表,则结果显示为#DELETED
. 解决方案的工作是:有一个虚拟列
TIMESTAMP
作为数据类型。在 ODBC DSN 管理器的连接对话框中选择该
Change BIGINT columns to INT
选项。从 Access 中删除表链接并重新创建它。
旧记录仍然显示为
#DELETED#
,但新添加/更新的记录会正确显示。
写入冲突或行位置错误
如何处理写入冲突或行位置错误?
如果您看到以下错误,请Return
Matching Rows
在 DSN 配置对话框中选择该选项,或指定OPTION=2
, 作为连接参数:
Write Conflict. Another user has changed your data.
Row cannot be located for updating. Some values may have been changed
since it was last read.
从 Access 97 导入
将数据从 Access 97 导出到 MySQL 会报告一个Syntax
Error
.
此错误特定于 Access 97 和早于 3.51.02 的连接器/ODBC 版本。更新到最新版本的连接器/ODBC 驱动程序以解决此问题。
从 Microsoft DTS 导入
将数据从 Microsoft DTS 导出到 MySQL 会报告一个
Syntax Error
.
只有使用
TEXT
或
VARCHAR
数据类型的 MySQL 表才会出现此错误。您可以通过将连接器/ODBC 驱动程序升级到版本 3.51.02 或更高版本来修复此错误。
来自 ODBC.NET 的 SQL_NO_DATA 异常
将 ODBC.NET 与连接器/ODBC 一起使用,在获取空字符串(0 长度)时,它开始给出SQL_NO_DATA
异常。
您可以从http://support.microsoft.com/default.aspx?scid=kb;EN-US;q319243 获取解决此问题的补丁 。
SELECT COUNT(*) 错误
在 Visual Basic 和 ASP 中使用会返回错误。
SELECT COUNT(*) FROM
tbl_name
发生此错误是因为
COUNT(*)
表达式返回一个BIGINT
,而 ADO 无法理解这么大的数字。选择Change BIGINT
columns to INT
选项(选项值 16384)。
多步操作错误
使用AppendChunk()
或
GetChunk()
ADO 方法,
Multiple-step operation generated errors. Check each
status value
返回错误。
当游标位置指定为 时,ADO 中的GetChunk()
和
AppendChunk()
方法无法按预期工作
adUseServer
。另一方面,您可以使用adUseClient
.
一个简单的例子可以从 http://www.dwam.net/iishelp/ado/docs/adomth02_4.htm找到
修改记录错误
Another user had modified the record
that you have modified
在链接表上编辑记录时
访问返回。
在大多数情况下,这可以通过执行以下操作之一来解决:
如果表不存在,则为表 添加一个主键。
如果时间戳列不存在,则添加一个时间戳列。
仅使用双精度浮点字段。有些程序在比较单精度浮点数时可能会失败。
如果这些策略没有帮助,首先从 ODBC 管理器创建一个日志文件(从 ODBCADMIN 请求日志时获得的日志)和一个连接器/ODBC 日志,以帮助您找出出错的原因。有关说明,请参阅 第 5.9 节 “获取 ODBC 跟踪文件”。
Unix 或 Linux 下的直接应用程序链接
在 Unix 或 Linux 下将应用程序直接链接到连接器/ODBC 库时,应用程序会崩溃。
Unix 或 Linux 下的连接器/ODBC 与直接应用程序链接不兼容。要连接到 ODBC 源,请使用驱动程序管理器,例如iODBC
或
unixODBC
。
Microsoft Office 和 DATE 或 TIMESTAMP 列
Microsoft Office 套件中的应用程序无法更新具有DATE
或
TIMESTAMP
列的表。
这是连接器/ODBC 的一个已知问题。确保该字段具有默认值(而不是NULL
)并且默认值非零(即不是
0000-00-00 00:00:00
)。
INFORMATION_SCHEMA 数据库
将 Connector/ODBC 5.x 连接到 MySQL 4.x 服务器时,
1044 Access denied for user 'xxx'@'%' to database
'information_schema'
返回错误。
Connector/ODBC 5.x 旨在与 MySQL 5.0 或更高版本一起使用,利用INFORMATION_SCHEMA
数据库来确定数据定义信息。计划在最终版本中支持 MySQL 4.1。
S1T00 错误
调用SQLTables
时返回错误
S1T00
,但我在 Connector/ODBC 的错误编号列表中找不到它。
该S1T00
错误表明 ODBC 系统中发生了一般超时,而不是 MySQL 错误。通常它表示您正在使用的连接已过时,服务器太忙无法接受您的请求或服务器已经消失。
Access 2000 中的“表不存在”错误
当链接到 Access 2000 中的表并以编程方式而不是通过表设计器界面生成表链接时,您可能会收到有关表不存在的错误。
的特定版本存在一个已知问题,
msjet40.dll
会出现此问题。受影响的版本是 4.0.9025.0。恢复到旧版本将使您能够创建链接。如果您最近更新了您的版本,请检查您的WINDOWS
目录中是否有旧版本的文件并将其复制到驱动程序目录。
批处理语句
当我尝试使用批处理语句时,批处理语句的执行失败。
3.51.18 中添加了批处理语句支持。默认情况下不启用对批处理语句的支持。启用选项
FLAG_MULTI_STATEMENTS
,值 67108864,或在 GUI 配置中选择允许多个语句标志。MySQL 不支持使用准备好的语句的批处理语句。
ADODB 和 Excel 的数据包错误
使用 ADODB 和 Excel 连接到 MySQL 服务器时,有时应用程序无法与服务器通信,Got an error reading communication
packets
错误日志中会出现错误。
此错误可能与 PanteraSoft.com 的键盘记录器 1.1 有关,已知它会干扰 MySQL Connector/ODBC 和 MySQL 之间的网络通信。
外连接错误
使用某些应用程序使用连接器/ODBC 和外部连接访问MySQL 服务器时,会报告有关外部连接转义序列的错误。
这是 MySQL Connector/ODBC 的一个已知问题,它没有根据
Microsoft ODBC Specs的规范正确解析“外部连接转义序列” 。目前,Connector/ODBC 将在请求时返回一个 > 0 的值,SQL_OJ_CAPABILITIES
即使在驱动程序中没有进行解析来处理外部连接转义序列。
希伯来语/CJK 字符
我可以使用连接器/ODBC 5.1 在数据库 (Hebrew/CJK) 中正确存储扩展字符,但是当我检索数据时,文本格式不正确并且出现乱码。
使用 ASP 和 UTF8 字符时,将以下内容添加到您的 ASP 文件以确保返回的数据被正确编码:
Response.CodePage = 65001
Response.CharSet = "utf-8"
已安装程序列表中的重复条目
我的已安装程序列表中有一个重复的 MySQL Connector/ODBC 条目,但我无法删除其中一个。
当您升级现有的连接器/ODBC 安装,而不是删除然后安装更新版本时,可能会出现此问题。
要解决此问题,请使用任何可用的卸载程序删除现有安装;然后可能必须编辑注册表的内容。在尝试对注册表内容进行任何编辑之前,请确保备份了注册表信息。
值被截断为 255 个字符
使用 提交带有参数绑定的查询时
UPDATE
,我的字段值被截断为 255 个字符。
确保FLAG_BIG_PACKETS
为您的连接设置了该选项。这消除了绑定参数的 255 个字符限制。
禁用执行时数据
是否可以使用标志禁用执行时数据?
如果您不想使用执行时数据,请删除相应的调用。例如:
SQLLEN ylen = SQL_LEN_DATA_AT_EXEC(10);
SQLBindCol(hstmt,2,SQL_C_BINARY, buf, 10, &ylen);
会成为:
SQLBindCol(hstmt,2,SQL_C_BINARY, buf, 10, NULL);
此示例还在对 的调用中将 &ylen 替换为 NULL
SQLBindCol()
。
有关详细信息,
请
参阅.SQLBindCol()
AUTO_INCREMENT 列的 NULLABLE 属性
当您调用SQLColumns()
一个表列时,结果集AUTO_INCREMENT
的
NULLABLE
列总是
SQL_NULLABLE (1)
.
这是因为 MySQL 将DEFAULT
此类列的值报告为NULL
. 这意味着,如果您NULL
向列中插入一个值,您将获得表
auto_increment
计数器的下一个整数值。