2014-07-03 60 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,在表示層進行轉換。