gpt4 book ai didi

mysql - ODBC 调用失败 - 从 32 位 ODBC 5.1 移动到 64 位 5.3 后出现随机日期溢出错误

转载 作者:行者123 更新时间:2023-11-29 01:52:17 25 4
gpt4 key购买 nike

背景:

  • 在 MS Access 2003 中运行的遗留代码。
  • 在 Access 中由 CurrentDB 运行的 SQL。
  • 目前在 Windows 7 32 位机器上运行。
  • 通过 ODBC 5.1 驱动程序连接到 MySQL Server 5.5。

问题:

  • 正在尝试迁移到 Windows Server 2012 64 位。
  • ODBC 5.3 Unicode 驱动程序(32 位)。
  • 不想花时间重写一切,因为有很多代码,并且在不久的将来会被删除。

问题:

  • 在新服务器上运行时有几个 SQL 语句失败。在旧服务器上工作。
  • 所有失败的sql语句中都有now()。
  • 错误描述说 ODBC 调用失败。虽然更详细的描述说日期溢出 - “[MySQL][ODBC 5.3(w) Driver][mysqlid-5.5.28-log]Date overflow”。
  • 随机发生,当它发生并且 Access 停止时,通常只需选择继续,然后 sql 就会工作。它失败的次数不到其运行次数的 1%(数千次)。
  • sql 中唯一的日期在 where 子句中:“and fieldA > now()”,其中 fieldA 是日期时间列。这是一个获取记录集的sql。插入期间的另一个错误是相同的,但是与日期时间相比之前从 now() 中减去一个整数。

我不明白为什么在似乎没有理由删除日期时间或“现在”的时间时却说日期溢出?并且由于日期时间字段已经在数据库中并且 now() 将获取当前日期和时间,因此不应该有任何无效日期?

对于问题可能是什么或如何调试/记录任何可能有帮助的任何帮助,我们将不胜感激。

在 ODBC 驱动程序中打开跟踪不是一个选项,因为它是随机发生的,有太多的流量,因此这会减慢一切,以至于什么都不会发生。

请注意,我也确实遇到了一个日期溢出错误消息正确的 sql。似乎在 5.3 之前,当将日期时间插入日期字段时,它会自动被截断,因为成功 3000 次的 sql 开始失败。因此,此 sql 已通过首先从字段中提取日期来修复。但其他错误必须有所不同。

最佳答案

Oracle 发布了包含错误修复的新版本:5.3.8

这个错误似乎是在 5.1.11 版本中引入的错误。

在高级选项中现在有一个日期溢出复选框,必须勾选该复选框才能在出现错误时继续执行代码。

Oracle 对修复的回复:“为了您的信息,修复方法是在 C 或 C++ 中可以使用 SQL_TIMESTAMP_STRUCT 读取或写入 DATE 类型。这个结构可以包含日期和时间。错误(日期溢出)是在操作本应为 DATE-only 时生成的,此结构的时间值非零。这是 ODBC API 要求的规范方法,但是,有时会造成不便,例如应用程序没有打扰用 0 值初始化整个结构,因为它知道它只需要 DATE 部分,但 TIME 分数的随机值可能会导致错误,尽管被截断了。引入了一个新选项以继续执行查询而不是返回错误。服务器将忽略 TIME 部分,结果就像有零一样。”

关于mysql - ODBC 调用失败 - 从 32 位 ODBC 5.1 移动到 64 位 5.3 后出现随机日期溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38307227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com