web-dev-qa-db-ja.com

Sybaseは日時情報をどのように格納しますか?

現在、一部のテーブルに日時値を格納しているSybaseデータベースがあります。 Sybaseデータベースのあるサーバーを別のタイムゾーンにある別の国に移動すると、データベース内の日時の値は異なって表示されますか?

つまり、次のシナリオを検討してください。

Sybaseデータベースはタイムゾーン+2:00で実行されます。

My Javaタイムゾーン+1:00に存在するアプリから、1970年1月1日1:00にデータベースに書き込みます。これはアプリのタイムゾーンのエポック0です。

preparedStatement.setTimestamp(3, new Timestamp(0));

ただし、SQL Workbench/Jクライアント(タイムゾーン+1:00)を使用してデータベースにクエリを実行すると、

1970-01-01 01:00:00

私のテーブルに。実際、コンピュータのクロックを変更するタイムゾーンは関係ありません。SQLWorkbench/Jクライアントは常にデータベースから1970-01-01 01:00:00を読み取ります。

別のJava時間帯+3:00に住んでいるクライアントは、

1970-01-01 01:00:00

これは、クライアントのタイムゾーンでEpoch -7200000または-2:00に変換されます。

したがって、元の質問に戻るために、Sybaseは日時値を次のように格納しますか?文字列またはエポック?試用できる無料のSybaseサーバーがないので、サーバーを別のタイムゾーンを持つ別の国に移動するとどうなりますか?

使用するタイプは「datetime」です。次に例を示します。

CREATE TABLE "dbo"."whatever" (eventDate datetime NOT NULL);
3
Jasper Citi

以下の回答は、 http://www.sybase.com/detail?id=1048699 で入手可能なSybaseの公式の技術ドキュメントから取られました(SAPは、sybase.comで多くのリンクのサポートを削除しましたが、The Way Back Machineには ページのコピー があるようです(少し古くても)。

Sybaseサーバーは、datetimeおよびsmalldatetimeデータ型(および、より新しいサーバーでは、日付と時刻のデータ型)、およびgetdate()、dateadd()、datediff()、datepart()を通じて日付と時刻のデータの使用をサポートします関数。 getutcdate()関数も一部のサーバーに追加され、サーバーが実行されているタイムゾーンに関係なく、現在の日時値を協定世界時で提供します。

ただし、datetimeデータ型とsmalldatetimeデータ型はタイムゾーン情報を格納せず、製品はタイムゾーンと夏時間の概念をまったく認識しません。 Sybaseサーバーは、オペレーティングシステムレベルで構成されたタイムゾーンに基づいて、オペレーティングシステムによって提供された値の日付と時刻の部分のみを認識して格納します(通常、UnixのTZ環境変数設定またはWindowsコントロールパネル)。製品を起動したユーザー用。 dateadd関数とdatediff関数の背後にある計算は、うるう年を認識します(100年ごと、400年ごとを除く4年ごとの規則を使用)。うるう秒の調整や夏時間からの移行は含まれません。定期的に。

したがって、基盤となるOSのタイムゾーンを変更しても、データベースのdatetimeフィールドに格納されているデータに大きな影響はないものと期待します。

4
Max Vernon