2014-07-03 62 views
0

我需要了解的Sybase手柄和商店时区:Sybase如何处理时区?

例如,如果一个JDBC客户端例如在时区+1:00和Sybase数据库是在时区+2:00:

  1. 当JDBC客户端应用程序写入数据库(例如INSERT/UPDATE)时,Sybase会将从客户端应用程序接收到的日期时间转换为其本地时区,然后将其存储在数据库表中?
  2. 当JDBC客户端应用程序从数据库读取数据时,Sybase结果集是否将包含客户端或服务器的带有SELECT查询的时区?
  3. 如果数据库服务器框稍后移动到另一个国家(例如时区+3:00),那么存储在Sybase数据库中的日期时间值与移动后插入的日期时间是否不一致?

因此,考虑到上述情况,我何时需要转换日期/时间,并将其转换为服务器或客户端的时区?

+0

实验,你会发现自己的答案。或阅读文档。您可能会发现行为因数据类型而异。 –

+0

不幸的是,我没有一个可以试用的免费的Sybase数据库服务器。我也不是DBA,这就是为什么我问这个问题。 – Koning

回答

1

Sybase ASE将存储客户端应用程序传递给它的任何时间戳。它假定应用程序知道它在做什么,并且不会进行任何转换。

这意味着写入的数据和读取的数据将基于客户端应用程序的时区而不是数据库服务器的时区。

这也意味着您可以将数据库服务器移动到任何您喜欢的位置,而不会导致数据不一致,因为您正在使用应用程序设置的时间。

+1

虽然客户端应用程序使用itssystem date(getdate())从Sybase服务器读取数据的位置,但我将添加到上面,但这将基于数据库主机本地时区设置而不是客户端应用程序时区。您可以使用getutcdate()来获得跨时区的一致定时,因为这将始终返回UTC日期。 如果有疑问检查 –

0

我的理解是SYSBASE从00:00 1存储微秒扬1970

  • SELECT \ READ:在主机的时区返回转换日期(即存储在微秒) 。
  • INSERT \ WRITE:根据主机时区的时区插入微秒值。

如果您移动数据库并更改主机时区,则返回到应用程序的日期将发生变化(至少为吸引),至少是日期的字符串表示形式。

我的建议,有DB和应用程序总是处理UTC,在表示层进行转换。