無料PHPプログラム

MySQL 5.1 リファレンスマニュアル :: 4 データベース管理 :: 4.10 MySQL のローカライズと国際的使用 :: 4.10.8 MySQL サーバのタイム ゾーン サポート
« 4.10.7 キャラクタ セットに関する問題

4.10.9 MySQL サーバのローケル サポート »
Section Navigation      [Toggle]
  • 4.10 MySQL のローカライズと国際的使用
  • 4.10.1 データおよびソート用キャラクタ セット
  • 4.10.2 英語以外のエラーメッセージ
  • 4.10.3 新しいキャラクタ セットの追加
  • 4.10.4 キャラクタ定義配列
  • 4.10.5 文字列照合サポート
  • 4.10.6 マルチ バイト文字サポート
  • 4.10.7 キャラクタ セットに関する問題
  • 4.10.8 MySQL サーバのタイム ゾーン サポート
  • 4.10.9 MySQL サーバのローケル サポート

4.10.8. MySQL サーバのタイム ゾーン サポート

MySQL サーバにはいくつかのタイム ゾーンがあります。

  • システムのタイム ゾーン。サーバ起動時に、ホスト マシンのタイム ゾーンを使用して、system_time_zone システム変数で設定する。それ以降にこの値が変更することはない。

    起動時の MySQL Server のシステム タイム ゾーンは、mysqld_safe で、--timezone=timezone_name を使用する。または、mysqld を起動する前に、TZ 環境変数で設定する。--timezone と TZ の許容値は、システムに依存するため、OS のドキュメントを参照のこと。

  • サーバのカレント タイム ゾーン。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 からカレントのタイム ゾーンに変換します。カレントのタイム ゾーン セッティングは、DATE, TIME, or DATETIME などのカラム値、または UTC_TIMESTAMP() 関数などによって表示する値には影響しません。

グローバルおよびクライアント指定のタイム ゾーンのカレント値は、次のように読み出します。

mysql> SELECT @@global.time_zone, @@session.time_zone;

timezone 値には、いくつかの形式があります。次に示す形式では文字区別はありません。

  • 'SYSTEM' 値は、システム タイム ゾーンと同じ値を示す。

  • UTC オフセットを示す文字列の値。たとえば、'+10:00' または '-6:00' など。

  • 指定したタイム ゾーンの値。たとえば、'Europe/Helsinki'、 'US/Eastern'、'MET' など。指定したタイム ゾーンは、タイム ゾーンの情報テーブルが mysql データベースにあるときにだけ使用できる。

MySQL のインストール手順でタイム ゾーン テーブルを mysql データベースに作成しますが、そのときは、ロードまではしません。その前に、テーブルを作成する必要があります。MySQL 4.1.3 以降にアップグレードする場合は、mysql データベースを更新すると、そのテーブルを作成できます。アップグレードに関する手順は、項4.5.4. 「mysql_upgrade ? MySQL アップグレードのテーブル チェック」 を参照してください。次に、テーブル作成してから、タイム ゾーン テーブルをロードするまでの手順 (手動) を示します。

注意

タイム ゾーンの情報をロードは、情報が変更する場合に応じて、変更します。たとえば、夏時間を導入している米国、メキシコ、カナダでは 2007年に導入ルールが変更しました。そのような変更がある場合、古いルールを使用しているアプリケーションとの誤差がでるため、MySQL サーバの時間で使用している情報を維持するために、タイム ゾーン テーブルをリロードする必要があります。このセクションで後述のノートを参照してください。

システムに独自の zoneinfo データベース (タイム ゾーンの関するファイル セット) がある場合、mysql_tzinfo_to_sql プログラムを使用して、タイム ゾーン テーブルの充てんを行います。Linux、FreeBSD、Sun Solaris、Mac OS X などのシステムでは、通常、タイム ゾーンに関するファイルは、/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
    

Windows または HP-UX など、zoneinfo データベースを使用しないシステムの場合は、パッケージのタイム ゾーン テーブルを使用します。これは、MySQL Developer Zone からダウンロードできます。

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

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

警告: システムに zoneinfo データベースがある場合は、ダウンロード パッケージを使用してはいけません。MySQL とシステム アプリケーション間での時間に関わる処理に誤差が生じる原因になります。代わりに、mysql_tzinfo_to_sql ユーティリティを使用してください。

レプリケーションを行うときのタイム ゾーン セッティングに関する情報は、項5.4.1. 「レプリケーション機能と既知問題」 を参照してください。

タイム ゾーン変更に対応

タイム ゾーンのルールに変更があるときは、古いルールを使用しているアプリケーションでも調節が必要になります。タイム ゾーンのずれを回避するために、システムのタイム ゾーン情報がカレント(最新の時間)であることを確認してください。MySQL では、タイム ゾーンをカレントにする必要がある要素が 2 つあります。

  • MySQL サーバでタイム ゾーンを SYSTEM で設定している場合は、オペレーティング システムの時間が、MySQL で使用する時間の値に影響するため、オペレーティング システムが最新 (アップデート) のタイム ゾーンを使用していることを確認する必要がある。大抵のオペレーティング システムでは、アップデートやサービス パックで時間変更に対応している。時間変更に関するアップデートなどオペレーティング システムのベンダー ウェブサイトを確認する。インターネットのパブリック タイムでサーバを稼動させている場合、システムが自動的に調整を行う。

  • MySQL で特定のタイム ゾーンを使用する場合、mysql データベースのタイム ゾーン テーブルのアップデートを行う。システムに独自の zeroinfo データベースがある場合は、 zeroinfo データベース をアップデートする度に、このセクションで前述した手順に従って、MySQL のタイム ゾーン テーブルをリロードする。 zeroinfo データベースがない場合は、MySQL Developer Zone のアップデート情報に従う。アップデートがある場合は、ダウンロードして、カレントのタイム ゾーン テーブルと置き換える。

Copyright c 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates

無料CGI PHPスクリプト | 新着情報スクリプト | 営業日カレンダー | PHPマニュアル | MySQLマニュアル | PEARマニュアル

Copyright (c) 2010 jmcodex.com All rights reserved.