SQL SERVER和ORACLE 的TimeZone問題

來源:互聯網
上載者:User
  1. 在我們的項目中有時可能會碰到這種情況,資料庫伺服器和用戶端處於不同的時區,因此我們在設計我們的系統時需要考慮時間的同步問題,即處於不同時區的不同用戶端能夠從伺服器中擷取到一致的時間。而如果你的系統要同時支援SQL SERVER和ORACLE的話,那麼你就需要從中找出統一的處理方式,因為SQL SERVER和ORACLE在這個問題的處理方式上是不一樣的。本文要介紹的是使用.NET下解決方案。
    下面介紹的是在ORACLE下可以採取的處理方式:

1. --------------------ORACLE伺服器----------------------------------------------------------------------------------
    在create table時指定欄位為timestamp with time zone
    --------------------用戶端--------------------------------------------------------------------------------------------
    從伺服器取資料: 擷取欄位的值(DateTime類型)即可,Database Provider會自動做處理
    向伺服器儲存資料: 直接傳遞用戶端DateTime對象的值
2. --------------------ORACLE伺服器----------------------------------------------------------------------------------
    在create table時指定欄位為timestamp with local time zone
    --------------------用戶端--------------------------------------------------------------------------------------------
    從伺服器取資料: 擷取欄位的值(DateTime類型),並使用DateTime的ToLocalTime轉化為本地時區下的時間
    向伺服器儲存資料: 直接傳遞用戶端DateTime對象的值
3. --------------------ORACLE伺服器----------------------------------------------------------------------------------
    在create table時指定欄位為date,在服務端儲存為UTC時間
    --------------------用戶端--------------------------------------------------------------------------------------------
    從伺服器取資料: 擷取欄位的值(DateTime類型),並使用DateTime的ToLocalTime轉化為本地時區下的時間
    向伺服器儲存資料: 將用戶端DateTime對象轉化為UTC時間,然後儲存至伺服器
    預存程序等服務端資料儲存: 擷取UTC時間儲存到欄位中
3. --------------------ORACLE伺服器----------------------------------------------------------------------------------
    在create table時指定欄位為date/timstamp,在服務端儲存為伺服器時區下的時間
   --------------------用戶端--------------------------------------------------------------------------------------------
    註:用戶端在啟動時候要擷取伺服器和用戶端的時區資訊,用用於後面的時間轉換。
    從伺服器取資料: 擷取欄位的值(DateTime類型),並使用DateTime的ToLocalTime轉化為本地時區下的時間
    向伺服器儲存資料: 將用戶端DateTime對象轉化為UTC時間,然後將UTC時間轉化為伺服器時間,然後儲存至伺服器
    預存程序等服務端資料儲存: 擷取伺服器時間儲存到欄位中
因為SQL SERVER本身並沒有ORACLE對於TIME ZONE的處理機制,所以只能採取上面的第3種或第4中方式。因此如果你的系統如果要同時支援ORACLE和SQL SERVER,建議採用第3種處理方式,因為相對第4種處理方式用戶端不需要從服務端擷取時區資訊。

其它問題:
1. ORACLE伺服器使用的時區資訊是存在資料庫的執行個體中的,在安裝時制定,預設使用的GMT+0:00
2. SQL SERVER伺服器使用的是OS的時區資訊

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.