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 リファレンスマニュアル  /  グローバリゼーション  /  MySQL Server でのタイムゾーンのサポート

10.6 MySQL Server でのタイムゾーンのサポート

MySQL Server は複数のタイムゾーン設定を保持しています。

  • システムタイムゾーン。サーバーは、起動するときに、ホストマシンのタイムゾーンを特定し、これを使用して system_time_zone システム変数で設定しようとします。その後、この値は変更しません。

    mysqld_safe--timezone=timezone_name オプションを使用すると、起動時に MySQL Server のシステムタイムゾーンを設定できます。mysqld を起動する前に、TZ 環境変数を設定することによって設定することもできます。--timezone または TZ に許可される値は、システムによって異なります。許容可能な値を確認するには、オペレーティングシステムのドキュメントを参照してください。

  • サーバーの現在のタイムゾーン。time_zone グローバルシステム変数は、サーバーが現在動作しているタイムゾーンを示します。time_zone の初期値は 'SYSTEM' であり、これはサーバーのタイムゾーンがシステムタイムゾーンと同じであることを示します。

    コマンド行で --default-time-zone=timezone オプションを使用すると、初期グローバルサーバータイムゾーン値を起動時に明示的に指定できます。または、オプションファイルで次の行を使用できます。

    default-time-zone='timezone'

    SUPER 権限がある場合は、実行時に次のステートメントを使用すると、サーバータイムゾーンのグローバル値を設定できます。

    mysql> SET GLOBAL time_zone = timezone;
  • 接続ごとのタイムゾーン。接続するそれぞれのクライアントには、time_zone セッション変数で指定された、それぞれのタイムゾーン設定があります。最初、セッション変数は、time_zone グローバル変数から値を取得しますが、クライアントは次のステートメントを使用して、それぞれのタイムゾーンを変更できます。

    mysql> SET time_zone = timezone;

現在のセッションのタイムゾーン設定は、ゾーンを区別する時間値の表示とストレージに影響します。これには、NOW()CURTIME() などの関数で表示される値や、TIMESTAMP カラムに保存し、そこから読み出す値も含まれます。TIMESTAMP カラムの値は、ストレージでは現在のタイムゾーンから UTC に、読み出しでは UTC から現在のタイムゾーンに変換されます。

現在のタイムゾーン設定は、UTC_TIMESTAMP() 関数などによって表示される値、または DATETIMEDATETIME カラムの値には影響しません。また、これらのデータ型の値も UTC で格納されません。タイムゾーンは、TIMESTAMP 値から変換するときにのみ適用されます。DATETIME、または DATETIME 値に対してロケール固有の演算を実行する場合、これらの値を UTC に変換し、演算を実行してから、元に変換し直します。

グローバルおよびクライアント固有のタイムゾーンの現在値は、次のように取得できます。

mysql> SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;

timezone 値は、次の複数の形式で指定でき、大文字と小文字を区別しません。

  • 'SYSTEM' 値は、タイムゾーンをシステムタイムゾーンと同じにする必要があることを示します。

  • この値は、'+10:00''-6:00' など、UTC からのオフセットを示す文字列として指定できます。

  • この値は、'Europe/Helsinki''US/Eastern''MET' などの名前付きのタイムゾーンとして指定できます。名前付きのタイムゾーンは、mysql データベース内のタイムゾーン情報テーブルが作成され移入されている場合にのみ使用できます。

MySQL のインストール手順では、mysql データベース内にタイムゾーンテーブルを作成しますが、これらをロードしません。次の手順を使用して、手動でこれを行う必要があります。(以前のバージョンから MySQL 4.1.3 以降にアップグレードする場合は、mysql データベースをアップグレードすることでテーブルを作成できます。セクション4.4.7「mysql_upgrade — MySQL テーブルのチェックとアップグレード」の手順を使用してください。テーブルを作成したあとでロードできます。)

注記

情報は変更することがあるので、タイムゾーン情報のロードは必ずしも 1 回だけの操作とはかぎりません。たとえば、米国、メキシコ、一部のカナダのサマータイムのルールは、2007 年に変更されました。このような変更が起きた場合、古いルールを使用したアプリケーションは旧式になり、MySQL Server で使用されている情報を最新の状態に維持するために、タイムゾーンテーブルをリロードする必要が生じることがあります。このセクションの最後のノートを参照してください。

システムに独自の zoneinfo データベース (タイムゾーンについて述べたファイルセット) がある場合、タイムゾーンテーブルに入力するために mysql_tzinfo_to_sql プログラムを使用する必要があります。このようなシステムには、Linux、FreeBSD、Solaris、OS X などがあります。これらのファイルの 1 つの適切な場所は /usr/share/zoneinfo ディレクトリです。システムに zoneinfo データベースがない場合、このセクションで後述するダウンロード可能なパッケージを使用できます。

mysql_tzinfo_to_sql プログラムはタイムゾーンテーブルのロードに使用されます。コマンド行で、zoneinfo ディレクトリのパス名を mysql_tzinfo_to_sql に渡し、出力を mysql プログラムに送信します。例:

shell> mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql

mysql_tzinfo_to_sql は、システムのタイムゾーンファイルを読み取り、そのファイルから SQL ステートメントを生成します。mysql はこれらのステートメントを処理して、タイムゾーンテーブルをロードします。

mysql_tzinfo_to_sql を使用すると、単一のタイムゾーンファイルをロードしたり、うるう秒情報を生成したりできます。

  • タイムゾーン名 tz_name に対応した単一のタイムゾーンファイル tz_file をロードするには、次のように mysql_tzinfo_to_sql を呼び出します。

    shell> mysql_tzinfo_to_sql tz_file tz_name | mysql -u root mysql

    このアプローチでは、サーバーが認識する名前付きゾーンごとに、個別のコマンドを実行してタイムゾーンファイルをロードする必要があります。

  • タイムゾーンがうるう秒に対応する必要がある場合は、次のようにうるう秒の情報を初期化します。ここで tz_file はタイムゾーンファイルの名前です。

    shell> mysql_tzinfo_to_sql --leap tz_file | mysql -u root mysql
  • mysql_tzinfo_to_sql の実行後、以前にキャッシュしたすべてのタイムゾーンデータを使用し続けないように、サーバーを再起動することをお勧めします。

zoneinfo データベース (Windows など) を含まないシステムの場合、MySQL Developer Zone でダウンロードに使用できる事前に構築されたタイムゾーンテーブルのパッケージを使用できます。

https://dev.mysql.com/downloads/timezones.html

このタイムゾーンパッケージには、MyISAM のタイムゾーンテーブル用に、.frm.MYD.MYI などのファイルが含まれています。これらのテーブルを mysql データベースの一部にする必要があるため、ファイルを MySQL Server のデータディレクトリの mysql サブディレクトリに入れてください。サーバーを停止してからこれを行い、そのあとで再起動します。

警告

システムに zoneinfo データベースがある場合は、ダウンロード可能なパッケージを使用しないでください。代わりに、mysql_tzinfo_to_sql ユーティリティーを使用してください。そうしないと、MySQL とシステム上のほかのアプリケーション間で日時処理に違いが生じることがあります。

レプリケーションセットアップのタイムゾーン設定の詳細は、セクション17.4.1「レプリケーションの機能と問題」を参照してください。