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側のタイムゾーン設定も確認します。
-
前の記事
SourceTreeのバージョンを確認する 2022.06.29
-
次の記事
javascript sliceとsubstringの違い 2022.06.30
コメントを書く