web-dev-qa-db-ja.com

MySQLタイムゾーン

MySQLタイムゾーンの完全なリストはありますか?

MySQL設定のtime_zoneの有効な値はホストオペレーティングシステムに依存しているようですが、可能な値のリストを見つけることができませんでした。

カルガリーの現地時間を表示する時間が必要です。

19
Gary

MySQL 5.7ドキュメント (エンファシスマイニング)から:

タイムゾーン値はいくつかの形式で指定できますが、大文字と小文字は区別されません。

値「SYSTEM」は、タイムゾーンがシステムタイムゾーンと同じであることを示します。

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

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

MySQLtimezone変数のデフォルト設定は、MySQL起動時のSYSTEMであることに注意してください。 SYSTEM値は、オペレーティングシステムの設定から取得されます(たとえば、symlink /etc/localtime

MySQLのデフォルトtimezone変数は、次のコマンドラインオプションを提供することにより、起動時に異なる値に初期化できます。

--default-time-zone=timezone

または、オプションファイルで値を指定する場合は、次の構文を使用して変数を設定する必要があります。

--default-time-zone='timezone'

MySQL SUPERユーザーの場合、次の構文を使用して、MYSQL>プロンプトから実行時にSYSTEMtime_zone変数を設定できます。

SET GLOBAL time_zone=timezone;

MySQLは、デフォルトでGLOBALtime_zone環境変数値に設定される個々のSESSIONtimezone値もサポートします。セッション中にセッションtimezone値を変更するには、次の構文を使用します。

SET time_zone=timezone;

既存のMYSQLtimezone設定値を調べるには、次のSQLを実行してこれらの値を取得できます。

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

それが価値があるものについて、私は単にグーグルでmysql time_zone設定の有効な値と最初の結果を見ました。

19
Brian Driscoll

デフォルトでは(少なくともDebianベースのインストールでは)タイムゾーンデータはMySQLにロードされません。ロードされているかどうかをテストする場合は、次を実行してください。

SELECT CONVERT_TZ('2012-06-07 12:00:00', 'GMT', 'America/New_York');

DATETIME(この場合は2012-06-07 08:00:00)を返す場合、タイムゾーンが読み込まれています。 NULLを返す場合、そうではありません。ロードされていない場合、オフセットを使用した変換に制限されます(例:+10:00または-6:00)。

多くの場合、これは正常に機能するはずですが、夏時間を気にしないなどのために、名前付きタイムゾーンを使用した方がよい場合があります。次のコマンドを実行すると、システムからタイムゾーンデータが読み込まれます(Unixのみ。同等のWindowsコマンドが何であるかわかりません)。

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

MySQLタイムゾーンに継続的に依存する必要がある場合、上記のコマンドは、システムタイムゾーンが更新されるたびに実行する必要があります。毎週または毎月のcronジョブに追加するだけで、自動的に実行することもできます。

次に、タイムゾーンのリストを表示するには、次の操作を行います。

USE mysql;
SELECT * FROM `time_zone_name`;

MySQLでは、タイムゾーン情報は約5 MBを占めることに注意してください。タイムゾーン情報をアンロードする場合は、次を実行してMySQLを再起動します。

TRUNCATE `time_zone` ;
TRUNCATE `time_zone_leap_second` ;
TRUNCATE `time_zone_name` ;
TRUNCATE `time_zone_transition` ;
TRUNCATE `time_zone_transition_type` ;

これらのテーブルをDROPしないでください


編集:

以下のユーザーのコメントに基づいて、システムの更新時にタイムゾーンを自動的に更新する場合は、最初にパスワードの入力を求められずにrootがログインできるようにする必要があります。

MySQL> = 5.6.6

次の[ source ]を実行します。

mysql_config_editor set --login-path=client --Host=localhost --user=root --password

MySQL <5.6.6

~/.my.cnfファイルを作成し(まだ存在しない場合)、次を追加します。

[client]
user=root
password=yourMysqlRootPW

次にchmod 600 ~/.my.cnfを実行して、他のユーザーがそれを読み取れないようにします。

更新スクリプト

次のスクリプトをcrontabに追加して、1日に1回実行されます。

#!/bin/bash
# Find if there are any timezone files that have been modified in the last 24   
# hours and do not have ".tab" in the name (since these are not timezone files) 
if [ `find /usr/share/zoneinfo -mtime -1 | grep -v '\.tab' | wc -l` -gt 0 ]; then
    echo "Updating MySQL timezone info"
    # Note, suppressing STDERR here because of the .tab files above
    # that cause warnings.
    mysql_tzinfo_to_sql /usr/share/zoneinfo 2>/dev/null | mysql -u root mysql
    echo "Done!\n"
fi

出力が必要ない場合は、echo行を削除します。

注:これは(ほとんど)テストされていません。問題がある場合はお知らせください。この回答を更新します。

42
Mike

私は先に進み、要点を作成しました。

https://Gist.github.com/4134305

https://Gist.github.com/kinjal/9105369

人々がそれを役に立つと思うことを願っています。

5
Kinjal Dixit

タイムゾーンの完全なリストは、MySQLサーバーにインポートされるデータベーステーブルとして、MySQLのWebサイトから ダウンロード にできます。

カルガリー時間には、 TCオフセット を指定できます

set time_zone = '-6:00';
3
sikander

MySQLタイムゾーン変数のデフォルト設定は、MySQL起動時のSYSTEMであることに注意してください。 SYSTEM値は、オペレーティングシステムのGLOBAL time_zone環境変数から取得されます。

MySQLのデフォルトのタイムゾーン変数は、次のコマンドラインオプションを提供することにより、起動時に異なる値に初期化できます。

--default-time-zone=timezone

または、オプションファイルで値を指定する場合は、次の構文を使用して変数を設定する必要があります。

--default-time-zone='timezone'

MySQL SUPERユーザーの場合、次の構文を使用して、MYSQL>プロンプトから実行時にSYSTEM time_zone変数を設定できます。

SET GLOBAL time_zone=timezone;

MySQLは、デフォルトでGLOBAL time_zone環境変数値に設定される個々のSESSIONタイムゾーン値もサポートします。セッション中にセッションのタイムゾーン値を変更するには、次の構文を使用します。

SET time_zone=timezone;

既存のMYSQLタイムゾーン設定値を調べるには、次のSQLを実行してこれらの値を取得できます。

SELECT @@global.time_zone, @@session.time_zone;
0
Mat