リレーショナルデータベースにはタイムゾーン情報を保持しているテーブルを持っていることが多い。主要なリレーショナルデータベースがどの名前でタイムゾーンの情報を保持しているかを確認する。
PostgreSQL
PostgreSQLのタイムゾーン情報は、システムカタログ pg_timezone_names
に保持されている。システムカタログとは、RDBMSがシステムに必要な内部情報を格納して置く領域のことを指し、PostgreSQLでのシステムカタログは通常のテーブルとなっている。
pg_timezone_names
pg_timezone_names
は次のように定義されている。
カラム | 型 | 用途 |
---|---|---|
name | text | タイムゾーンの名前 |
abbrev | text | |
utc_offset | interval | オフセット値 |
is_dst | boolean |
\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。
スキーマ | テーブル | 用途 |
---|---|---|
mysql | time_zone | タイムゾーン ID、およびうるう秒を使用するかどうか。 |
mysql | time_zone_leap_second | うるう秒が発生したとき。 |
mysql | time_zone_name | タイムゾーン ID と名前のマッピング。 |
mysql | time_zone_transition | タイムゾーンの説明1。 |
mysql | time_zone_transition_type | タイムゾーンの説明2。 |
一つずつ詳しく確認していく。
time_zone
タイムゾーン ID、およびうるう秒を使用するかどうか。
カラム | 型 | 用途 |
---|---|---|
Time_zone_id | int unsigned | |
Use_leap_seconds | enum('Y','N') |
time_zone_leap_second
うるう秒が発生したとき。
カラム | 型 | 用途 |
---|---|---|
Transition_time | bigint | |
Correction | int |
time_zone_name
タイムゾーン ID と名前のマッピング。
カラム | 型 | 用途 |
---|---|---|
Name | char(64) | |
Time_zone_id | int unsigned |
time_zone_transition
タイムゾーンの説明1。
カラム | 型 | 用途 |
---|---|---|
Time_zone_id | int unsigned | |
Transition_time | bigint | |
Transition_type_id | int unsigned |
time_zone_transition_type
タイムゾーンの説明2。
カラム | 型 | 用途 |
---|---|---|
Time_zone_id | int unsigned | |
Transition_type_id | int unsigned | |
Offset | int | |
Is_DST | tinyint unsigned | |
Abbreviation | char(8) |