自从大约两周前开始夏令时以来,我们注意到我们新的 ColdFusion 站点上的任何以下列方式限制日期的查询都返回了错误的数据(其中 StartDate 的格式为 dd-mmm-yyyy)。

select ...
from ...
where ...
  and o.booking_date >= date('#StartDate#')
  and o.booking_date < date('#StartDate#') + date('1 day')

我们发现,如果 StartDate 更改如下,则返回正确的数据:
and booking_date >= '#DateFormat(DateAdd("d",-1,StartDate), "dd-mmm-yyyy")# 13:00'
and booking_date < '#DateFormat(StartDate, "dd-mmm-yyyy")# 13:00'

我们的 CF 服务器上的时间是正确的,并设置为 UTC+10:00,并启用了夏令时的自动调整。 Ingres II Visual Manager (II_TIMEZONE_NAME) 中的时间设置设置为 AUSTRALIA-VICTORIA。

我们使用 ColdFusion 10 通过 JDBC 连接到 Ingres 数据库。我们使用 ODBC 连接到 Ingres 数据库的旧 ColdFusion 4.5 服务器没有遇到这个问题,所以我认为我们遇到的问题一定与 ColdFusion 10 或我们现在使用的 JDBC 连接有某种关系。

关于为什么会发生这种情况的任何想法?为什么在执行上面第一个示例中所示的操作时需要指定纯 UTC 日期/时间(即没有时间调整)?

谢谢。

最佳答案

假设您使用的是最新版本的 Ingres、9.x 及更高版本,您可能必须将时区指定为连接属性/属性。例如,您可以将连接 URL 属性 TZ 设置为 AUSTRALIA-VICTORIA ,即
jdbc:ingres://..../mydb;TZ=AUSTRALIA-VICTORIA
如果 Coldfusion 支持 JDBC 属性,则属性名称为 timezone ,TZ/II_TIMEZONE_NAME 的值相同。

虽然 ODBC 和 JDBC 最终都通过相同的接口(interface)连接到 Ingres,但 JDBC 不知道服务器环境,因此未观察到 II_TIMEZONE_NAME。

关于sql - 自夏令时开始以来,Coldfusion、SQL 和 Ingres 的数据不正确,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12947653/

10-10 04:18