MySQL タイムゾーンを確認する

  • 作成日 2022.06.29
  • 更新日 2026.05.15
  • mysql
MySQL タイムゾーンを確認する

MySQLで、タイムゾーンを確認する手順を記述してます。

環境

  • OS ubuntu21.10
  • MySQL Ver 8.0.27-0ubuntu0.21.10.1 for Linux on x86_64 ((Ubuntu))
  • MySQL Workbench 8.0.27

手順

タイムゾーンを確認するには、「SHOW VARIABLES LIKE」で確認します。

SHOW VARIABLES LIKE '%time_zone%'

実際に、確認してみます。

SHOW VARIABLES LIKE '%time_zone%'

実行結果をみると、設定されているタイムゾーンが取得されていることが確認できます。

ホストマシンの方が(system_time_zone)がJST時刻となり、
サーバの現在の設定(time_zone)が「SYSTEM = system_time_zone」となります。

変数で確認

以下のように変数を確認する方法もあります。

SELECT @@system_time_zone, @@session.time_zone

実行結果

追記

現在時刻でタイムゾーンを確認する

タイムゾーンの設定値だけでなく、実際にMySQL上で取得される現在時刻を確認することもできます。

SELECT NOW();

UTC時刻と比較したい場合は、以下のように実行します。

SELECT NOW(), UTC_TIMESTAMP();

日本時間で設定されている場合は、「NOW()」と「UTC_TIMESTAMP()」の結果に9時間の差が出ます。

グローバルとセッションのタイムゾーンを確認する

MySQLでは、全体設定のグローバルタイムゾーンと、現在接続しているセッションのタイムゾーンを確認できます。

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

「@@global.time_zone」はMySQL全体の設定、「@@session.time_zone」は現在の接続で使用されている設定です。

セッション単位でタイムゾーンを変更する

現在の接続だけタイムゾーンを変更したい場合は、「SET time_zone」を使用します。

SET time_zone = '+09:00';

変更後に確認します。

SELECT @@session.time_zone, NOW();

この設定は現在のセッションだけに反映されるため、再接続すると元に戻ります。

グローバルのタイムゾーンを変更する

MySQL全体のタイムゾーンを変更する場合は、以下のように実行します。

SET GLOBAL time_zone = '+09:00';

変更後に確認します。

SELECT @@global.time_zone;

ただし、既に接続済みのセッションには反映されない場合があります。再接続してから確認します。

my.cnfでタイムゾーンを設定する

MySQLを再起動しても設定を維持したい場合は、設定ファイルに記述します。

[mysqld]
default-time-zone = '+09:00'

設定後、MySQLを再起動します。

sudo systemctl restart mysql

再起動後に、以下で確認します。

SHOW VARIABLES LIKE '%time_zone%';

SYSTEMと表示される場合

「time_zone」が「SYSTEM」と表示される場合は、MySQLがOS側のタイムゾーンを参照している状態です。

SHOW VARIABLES LIKE '%time_zone%';

OS側のタイムゾーンを確認するには、Ubuntuなどでは以下を実行します。

timedatectl

「Time zone」が「Asia/Tokyo」になっていれば、日本時間が使用されています。

JSTとして表示されない場合

「+09:00」に設定している場合、結果が「JST」ではなく「+09:00」と表示されることがあります。

SET time_zone = '+09:00';
SELECT @@session.time_zone;

この場合でも、日本時間としては正しく動作します。

タイムゾーン名で「Asia/Tokyo」を使用したい場合は、MySQLのタイムゾーンテーブルが読み込まれている必要があります。

Asia/Tokyoを指定する場合

タイムゾーン名で指定する場合は、以下のように実行します。

SET time_zone = 'Asia/Tokyo';

ただし、環境によっては以下のようなエラーが発生する場合があります。

ERROR 1298 (HY000): Unknown or incorrect time zone: 'Asia/Tokyo'

この場合は、タイムゾーンテーブルが読み込まれていない可能性があります。Ubuntuでは、以下のようにタイムゾーン情報をMySQLへ読み込ませます。

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

読み込み後、MySQLを再起動してから再度確認します。

sudo systemctl restart mysql

まとめ

MySQLのタイムゾーンは、以下のように確認できます。

SHOW VARIABLES LIKE '%time_zone%';
SELECT @@system_time_zone, @@session.time_zone;
SELECT @@global.time_zone, @@session.time_zone;
SELECT NOW(), UTC_TIMESTAMP();

一時的に変更する場合は「SET time_zone」、永続的に変更する場合は「my.cnf」の「default-time-zone」を使用します。

SET time_zone = '+09:00';
SET GLOBAL time_zone = '+09:00';

「SYSTEM」と表示される場合は、MySQLではなくOS側のタイムゾーン設定も確認します。