MySQLのタイムゾーンの設定について
タイムゾーンの確認方法
SHOW VARIABLES LIKE '%time_zone%';
SHOW VARIABLES は、MySQL システム変数の値を表示するので、MySQLの設定値を確認するときに使います。今回は、time_zoneを確認したいので、LIKE構文で指定しています。
以下のように表示されました。
ホストマシンの設定(system_time_zone)がUTC時刻で、MySQLサーバの現在の設定(time_zone)がデフォルトの'SYSTEM'でUTC時刻となっています。
Variable_name | Value |
---|---|
system_time_zone | UTC |
time_zone | SYSTEM |
SELECT now();
now() |
---|
2019-11-26 02:58:47 |
コマンド実行時が日本時間(+9:00)の11:58:47だったので、UTC時刻が表示されています。
セッション変数とグローバル変数
セッション変数
⇒現在の接続のみに影響します。
設定方法
SET (SESSION) [変数名] = [値];
グローバル変数
⇒全接続に影響する設定です。
設定方法
SET GLOBAL [変数名] = [値];
※ただし、サーバ自体を再起動してしまうとSET文での設定内容は失われるため、永続的な変更であれば設定ファイルを変更する必要があります。
実際にセッションを変えて確認してみます。
SET SESSION time_zone = "Asia/Tokyo"; SHOW VARIABLES LIKE '%time_zone%';
Variable_name | Value |
---|---|
system_time_zone | UTC |
time_zone | Asia/Tokyo |
select now();
now() |
---|
2019-11-26 12:06:12 |
コマンド実行時が日本時間(+9:00)の12:06:12だったので、日本時刻が表示されています。
ちなみにこのタイミングでグローバル変数を確認すると、設定が変わっていないため、全接続の設定(グローバル)には影響を与えておらず、現在の接続(セッション)のみに影響を与えていることが分かります。
SHOW GLOBAL VARIABLES LIKE '%time_zone%';
Variable_name | Value |
---|---|
system_time_zone | UTC |
time_zone | SYSTEM |
新たな接続(セッション)で確認すると、先ほどはセッションの設定だったためにUTC時刻に戻っていることが分かります。
select now();
now() |
---|
2019-11-26 03:07:38 |
以上です。