MySQLとPostgreSQLのtimezoneの取り扱いの違い

環境:MySQL 5.6、PostgreSQL12 on Windows

DBのタイムゾーンはAsia/Tokyo


DATE型カラム(hogedate)に'2020-07-20'が入っている場合を考える。


MySQLでそのカラムをUNIX_TIMESTAMP(hogedate)すると2020-07-19  15:00:00のUNIX TIMESTAMPが得られる。

PostgreSQLでそのカラムをEXTRACT(EPOCH FROM hogedate)すると、2020-07-20 00:00:00のUNIX TIMESTAMPが得られる。


PostgreSQLは全体的にtimezoneを無視する印象

普通にtimestampを宣言するとtime zoneが考慮されない。

SELECT EXTRACT(EPOCH FROM timestamp '2020-07-20 00:00:00') =>  1595203200   (2020-07-20 00:00:00UTCのUNIX時間)

SELECT EXTRACT(EPOCH FROM timestamp with time zone '2020-07-20 00:00:00') => 1595170800    (2020-07-19 15:00:00UTCのUNIX時間)

日本国内に閉じたシステムであれば、 無理に考慮してくれない方が扱いやすい。


参考:

PostgreSQL12 8.5. 日付/時刻データ型

https://www.postgresql.jp/document/12/html/datatype-datetime.html

#MySQL #PostgreSQL   #date #timestamp #timezone