Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  タイムゾーンの変更による現在の時間の維持

10.6.1 タイムゾーンの変更による現在の時間の維持

前述のように、タイムゾーンルールが変更すると、古いルールを使用するアプリケーションが旧式になります。現在の時間に維持するには、システムが現在のタイムゾーン情報を使用していることを確認する必要があります。MySQL の場合、現在の時間に維持するために考慮する 2 つの要素があります。

  • オペレーティングシステムの時間は、そのタイムゾーンが SYSTEM に設定されている場合、MySQL Server が時間に使用する値に影響します。オペレーティングシステムが最新のタイムゾーン情報を使用していることを確認します。ほとんどのオペレーティングシステムでは、最新の更新またはサービスパックによってシステムは時間の変更に対応できます。時間の変更に対処した更新については、オペレーティングシステムベンダーの Web サイトを確認してください。

  • システムの /etc/localtime タイムゾーンファイルを、mysqld の起動時に有効なものとは異なるルールを使用するバージョンに置き換えた場合、更新したルールを使用するように mysqld を再起動する必要があります。そうしないと、システムが時間を変更したときに mysqld が認識されないことがあります。

  • MySQL で名前付きのタイムゾーンを使用する場合、mysql データベース内のタイムゾーンテーブルが最新になっていることを確認します。システムに独自の zoneinfo データベースがある場合は、zoneinfo データベースを更新するたびに、このセクションで前述した手順を使用して MySQL タイムゾーンテーブルをリロードする必要があります。システムに独自の zoneinfo データベースがない場合、MySQL Developer Zone で更新がないか調べます。新しい更新が利用できる場合は、これをダウンロードし使用して、現在のタイムゾーンテーブルを置き換えます。mysqld は、検索したタイムゾーン情報をキャッシュするので、タイムゾーンテーブルを置き換えたあとは、mysqld を再起動して、古くなったタイムゾーンデータを提供し続けないようにする必要があります。

サーバーのタイムゾーン設定として使用するか、独自のタイムゾーンを設定するクライアントが使用するために、名前付きタイムゾーンが使用できるかどうか不確かな場合は、タイムゾーンテーブルが空かどうかを調べてください。次のクエリーは、タイムゾーン名を含むテーブルに行があるかどうかを判断します。

mysql> SELECT COUNT(*) FROM mysql.time_zone_name;
+----------+
| COUNT(*) |
+----------+
|        0 |
+----------+

カウントがゼロの場合、テーブルが空であることを示します。この場合、名前付きタイムゾーンを使用できず、テーブルを更新する必要はありません。カウントがゼロより大きい場合、テーブルは空ではなく、その内容が名前付きタイムゾーンのサポートに使用できることを示します。この場合、名前付きタイムゾーンを使用するユーザーが、正しいクエリー結果が得られるように、必ずタイムゾーンテーブルをリロードしてください。

サマータイムのルール変更に対して MySQL インストールが正しく更新されているかどうかを確認するには、次のようなテストを使用します。この例では、3 月 11 日午前 2 時に米国で行われる 2007 年 DST の 1 時間の変更に適切な値を使用しています。

テストでは次の 2 つのクエリーを使用します。

SELECT CONVERT_TZ('2007-03-11 2:00:00','US/Eastern','US/Central');
SELECT CONVERT_TZ('2007-03-11 3:00:00','US/Eastern','US/Central');

2 つの時間値は、DST 変更が行われる時間を示し、名前付きタイムゾーンの使用には、タイムゾーンテーブルを使用する必要がにあります。結果では、両方のクエリーで同じ結果が返されることが期待されます (「米国/中央」タイムゾーンの同等の値に変換された入力時間)。

タイムゾーンテーブルを更新する前に、次のような正しくない結果が表示されます。

mysql> SELECT CONVERT_TZ('2007-03-11 2:00:00','US/Eastern','US/Central');
+------------------------------------------------------------+
| CONVERT_TZ('2007-03-11 2:00:00','US/Eastern','US/Central') |
+------------------------------------------------------------+
| 2007-03-11 01:00:00                                        |
+------------------------------------------------------------+

mysql> SELECT CONVERT_TZ('2007-03-11 3:00:00','US/Eastern','US/Central');
+------------------------------------------------------------+
| CONVERT_TZ('2007-03-11 3:00:00','US/Eastern','US/Central') |
+------------------------------------------------------------+
| 2007-03-11 02:00:00                                        |
+------------------------------------------------------------+

テーブルの更新後に、正しい結果が表示されます。

mysql> SELECT CONVERT_TZ('2007-03-11 2:00:00','US/Eastern','US/Central');
+------------------------------------------------------------+
| CONVERT_TZ('2007-03-11 2:00:00','US/Eastern','US/Central') |
+------------------------------------------------------------+
| 2007-03-11 01:00:00                                        |
+------------------------------------------------------------+

mysql> SELECT CONVERT_TZ('2007-03-11 3:00:00','US/Eastern','US/Central');
+------------------------------------------------------------+
| CONVERT_TZ('2007-03-11 3:00:00','US/Eastern','US/Central') |
+------------------------------------------------------------+
| 2007-03-11 01:00:00                                        |
+------------------------------------------------------------+

User Comments
Sign Up Login You must be logged in to post a comment.