sql >> データベース >  >> RDS >> PostgreSQL

ローカルタイムゾーンオフセットで保存されているjOOQタイムスタンプ

    残念ながら、あなたにはいくつかの問題があります:

    1. PostgreSQL JDBCドライバーは、PostgresセッションでタイムゾーンをJVMタイムゾーンに設定します。したがって、データベースサーバーがUTCで実行されている場合でも、JVMのタイムゾーンを使用してTIMESTAMPフィールドが挿入されます。データを挿入またはクエリすると、データベースサーバーは常にJVMタイムゾーンを使用します。
    2. TIMESTAMPTZの代わりにTIMESTAMPを使用しています。これらのタイプの説明は、実際の使用法を反映していません。 TIMESTAMPTZは、実際にはタイムゾーンにとらわれないことを意味します。挿入する値が何であれ、セッションのタイムゾーンを使用してUTCに調整されます。

    これらの2つの問題のため、2つの異なるJVM(1つはロサンゼルス時間を使用し、もう1つはニューヨーク時間を使用)がある場合、一方のJVMでTIMESTAMPを作成すると、もう一方のJVMでは異なる「UTC時間」になります。 TIMESTAMPは調整された値を取得し、指定されたとおりに使用します。 TIMESTAMP列をTIMESTAMPTZに変更すると、両方のJVMの同じ時刻が常に同じUTC時刻になります。

    Postgres JDBC DriverのConnectionFactoryImpl#openConnectionImpを見ると、ローカルJVMのタイムゾーンがデータベースサーバーのセッションゾーンのタイムゾーンとして設定されている場所がわかります。

    したがって、これに対処する唯一の正しい方法は、TIMESTAMPの代わりにTIMESTAMPTZのみを使用することです。これに関する詳細は次のとおりです:

    PostgreSQL/JDBCおよびTIMESTAMPとTIMESTAMPTZ

    http://justatheory.com/computers/databases/postgresql/use-timestamptz .html



    1. mysqlフィールドの値が重複している場合、新しい値で新しい行を挿入します

    2. MySQLデータベース/テーブル/列がどの文字セットであるかを確認するにはどうすればよいですか?

    3. UTC時間からMySQLでUnixタイムスタンプを取得するにはどうすればよいですか?

    4. cPanelログインなしでPhpMyAdminにアクセスする方法