« ^ »
[WIP]

RDBMSのタイムゾーン情報テーブル

所要時間: 約 2分

リレーショナルデータベースにはタイムゾーン情報を保持しているテーブルを持っていることが多い。主要なリレーショナルデータベースがどの名前でタイムゾーンの情報を保持しているかを確認する。

PostgreSQL

PostgreSQLのタイムゾーン情報は、システムカタログ pg_timezone_names に保持されている。システムカタログとは、RDBMSがシステムに必要な内部情報を格納して置く領域のことを指し、PostgreSQLでのシステムカタログは通常のテーブルとなっている。

pg_timezone_names

pg_timezone_names は次のように定義されている。

カラム用途
nametextタイムゾーンの名前
abbrevtext
utc_offsetintervalオフセット値
is_dstboolean
\d pg_timezone_names;
          View "pg_catalog.pg_timezone_names"
   Column   |   Type   | Collation | Nullable | Default
------------+----------+-----------+----------+---------
 name       | text     |           |          |
 abbrev     | text     |           |          |
 utc_offset | interval |           |          |
 is_dst     | boolean  |           |          |

次のような値が実際に設定されている。

\c postgres;
SELECT * FROM pg_timezone_names LIMIT 3;
       name        | abbrev | utc_offset | is_dst
-------------------+--------+------------+--------
 Cuba              | CST    | -05:00:00  | f
 posixrules        | EST    | -05:00:00  | f
 Africa/Casablanca | +01    | 01:00:00   | f
(3 rows)

MySQL

MySQLのタイムゾーン情報は、mysqlスキーマ内のいくつかのテーブルに保持されている1

スキーマテーブル用途
mysqltime_zoneタイムゾーン ID、およびうるう秒を使用するかどうか。
mysqltime_zone_leap_secondうるう秒が発生したとき。
mysqltime_zone_nameタイムゾーン ID と名前のマッピング。
mysqltime_zone_transitionタイムゾーンの説明1。
mysqltime_zone_transition_typeタイムゾーンの説明2。
MySQLのタイムゾーンに関連する情報を保持しているテーブル

一つずつ詳しく確認していく。

time_zone

タイムゾーン ID、およびうるう秒を使用するかどうか。

カラム用途
Time_zone_idint unsigned
Use_leap_secondsenum('Y','N')

time_zone_leap_second

うるう秒が発生したとき。

カラム用途
Transition_timebigint
Correctionint

time_zone_name

タイムゾーン ID と名前のマッピング。

カラム用途
Namechar(64)
Time_zone_idint unsigned

time_zone_transition

タイムゾーンの説明1。

カラム用途
Time_zone_idint unsigned
Transition_timebigint
Transition_type_idint unsigned

time_zone_transition_type

タイムゾーンの説明2。

カラム用途
Time_zone_idint unsigned
Transition_type_idint unsigned
Offsetint
Is_DSTtinyint unsigned
Abbreviationchar(8)

脚注