MySQLタイムゾーンの完全なリストはありますか?
MySQL設定のtime_zone
の有効な値はホストオペレーティングシステムに依存しているようですが、可能な値のリストを見つけることができませんでした。
カルガリーの現地時間を表示する時間が必要です。
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設定の有効な値と最初の結果を見ました。
デフォルトでは(少なくとも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がログインできるようにする必要があります。
次の[ source ]を実行します。
mysql_config_editor set --login-path=client --Host=localhost --user=root --password
~/.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
行を削除します。
注:これは(ほとんど)テストされていません。問題がある場合はお知らせください。この回答を更新します。
私は先に進み、要点を作成しました。
https://Gist.github.com/4134305
https://Gist.github.com/kinjal/9105369
人々がそれを役に立つと思うことを願っています。
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;