Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
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
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
Sign Up Login You must be logged in to post a comment.