我需要了解Sybase如何处理和存储时区:
例如,如果JDBC客户端位于时区+1:00,而Sybase DB位于时区+2:00:
- 当JDBC客户端应用程序写入数据库(例如INSERT/UPDATE)时,Sybase将从客户端应用程序接收到的日期时间转换为其本地时区,并将其存储在db表中吗?
- 当JDBC客户端应用程序从数据库读取数据时,Sybase结果集是否包含客户端或服务器的SELECT查询时区?
- 如果DB服务器框后来移动到另一个国家,例如在时区+3:00,Sybase数据库中存储的日期时间值是否与移动后插入的日期时间不一致?
Sybase ASE将存储客户端应用程序传递给它的任何时间戳。它假设应用程序知道它在做什么,并且不会做任何转换。
这意味着写入和读取的数据将基于客户端应用程序的时区,而不是数据库服务器的时区。
这也意味着您可以随意移动数据库服务器,而不会导致数据不一致,因为您使用的是应用程序设置的时间。
我的理解是Sysbase存储从1970年1月1日00:00开始的微秒数。
- SELECTREAD:返回主机时区的转换日期(以微秒为单位存储)。
- INSERTWRITE:插入基于主机时区的微秒值。
如果移动数据库并更改主机时区,返回到应用程序的日期将发生变化(这很糟糕),至少日期的字符串表示形式会发生变化。
我的建议,让DB和Application始终在UTC处理,在表示层进行转换。