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

PostgresおよびJDBCのタイムスタンプとは別にタイムゾーンを保存する必要がありますか?

    timestamp with time zoneを保存する場合 (timestamptz )DBに保存するためにUTCに変換されます。取得されると、元のタイムゾーンではなく、クライアントの現在のタイムゾーンに変換されます。基本的には特定の時点です。

    timestamp without time zoneもあります (timestamp )。これは変換の対象ではありませんが、ではありません。 タイムスタンプを付けます。 timestampを保存する場合 クライアントのタイムゾーンをUTCに設定し、クライアントのタイムゾーンが「+08:00」のときに取得すると、同じ値が得られます。これは、生の時間値を保持するという点で、必要な半分です。

    名前と動作はひどく紛らわしいですが、SQL標準によって設定されています。

    特定のタイムゾーンで特定の時点を記録する場合は、タイムゾーンを個別に保存する必要があります。 INTERVALとして保存することをお勧めします CHECKを使用 colname BETWEEN INTERVAL '-12' HOUR + INTERVAL '1' SECOND AND INTERVAL '12' HOURに制限する制約 。その定義は-12:00を拒否し、+ 12:00を受け入れます。それが正しいかどうかは完全にはわかりませんので、確認してください。

    timestampを保存することもできます そのタイムゾーンでの現地時間の(おそらく私がするだろう)、またはtimestamptzを保存する イベントが発生したUTC時間と、それを現地時間に変換できるオフセット。

    どちらもJDBCで正常に機能します。 JPAの場合、プロバイダーが間隔タイプをどの程度理解してマップするかによって異なります。理想的には、timestampを使用して、必要なカレンダーインスタンスを再構築する一時的に生成されたフィールドがエンティティに必要です。 およびinterval データベースに保存されます。



    1. コメント投票データベース構造のベストプラクティス

    2. mysqlクエリでダッシュ(-)を正しくエスケープする

    3. MySQLで先頭と末尾の文字を削除する方法

    4. PHPでMySQLFound_Rows()を使用する方法は?