MySQLでタイムゾーンを確認したり、設定する方法について書いています。
MySQLでタイムゾーンを設定するときには、SETを使って一時的に設定するか、設定ファイル(my.cnf)で設定する方法があります。
公式ドキュメントでは、タイムゾーンについての記事がこちらにありました。
載せているSQLについては、MySQLのバージョン8.0.32を使って動作を確認しています。(Mac OS)
現在のタイムゾーンを確認する
下記のSQLで現在のタイムゾーンを確認することができます。
SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;
実行すると、このように設定されているタイムゾーンが確認できます。
mysql> SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;
+--------------------+---------------------+
| @@GLOBAL.time_zone | @@SESSION.time_zone |
+--------------------+---------------------+
| SYSTEM | SYSTEM |
+--------------------+---------------------+
1 row in set (0.00 sec)
現在のグローバル変数もセッション変数も’SYSTEM’になっています。
デフォルトでは’SYSTEM’なので、MySQLのタイムゾーンはMySQLが動いているシステムのタイムゾーンと同じになります。
MySQLのタイムゾーンを設定する
MySQLのタイムゾーンを設定するには、設定ファイル(my.cnf)に書いて起動時に効くようにしておくか、SETを使って一時的にタイムゾーンを設定することができます。
タイムゾーンを設定する準備をする
まず、タイムゾーン情報があるか確認します。
タイムゾーンの情報がないと、タイムゾーンを設定できません。
SELECT COUNT(*) FROM mysql.time_zone_name;
SQLを実行して、タイムゾーンがカウントが0じゃなければタイムゾーン情報があります。
mysql> SELECT COUNT(*) FROM mysql.time_zone_name;
+----------+
| COUNT(*) |
+----------+
| 598 |
+----------+
1 row in set (0.00 sec)
日本のタイムゾーンが設定できるかは、下記のSQLで確認できます。
SQLを実行すると、存在していることが確認できました。
mysql> SELECT * FROM mysql.time_zone_name WHERE Name = 'Asia/Tokyo';
+------------+--------------+
| Name | Time_zone_id |
+------------+--------------+
| Asia/Tokyo | 322 |
+------------+--------------+
1 row in set (0.01 sec)
タイムゾーンがないとき
mysql.time_zone_name
のテーブルを確認して、カウントが0件のときです。
この場合には、下記のようにターミナルで実行して、タイムゾーン情報をシステムから共有できました。(Macで確認しました)
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
グローバル変数・セッション変数に設定する
グローバル変数に設定するには、下記のようにSQLを実行します。
Asia/Tokyo
を設定してみました。
SET GLOBAL time_zone = 'Asia/Tokyo';
セッション変数に設定するには、下記のようにSQLを実行します。
SET time_zone = 'Asia/Tokyo';
確認すると、下記のようにどちらの変数にもAsia/Tokyo
が設定されています。
mysql> SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;
+--------------------+---------------------+
| @@GLOBAL.time_zone | @@SESSION.time_zone |
+--------------------+---------------------+
| Asia/Tokyo | Asia/Tokyo |
+--------------------+---------------------+
1 row in set (0.00 sec)
変数に設定した内容は、MySQLを起動しなおすと設定がデフォルト(SYSTEM)に戻るので、注意が必要です。
設定ファイル(my.cnf)で設定する
使いたいタイムゾーンを設定ファイルに記載しておくと、サーバー起動時に設定してくれます。
設定ファイル(my.cnf)の場所については、こちらの記事を確認してみてください。
設定ファイル(my.cnf)に下記のように記載します。
[mysqld]
default-time-zone='Asia/Tokyo'
設定ファイルを変えた後に、MySQLを再起動します。
再起動後に設定内容を確認すると、下記のようにAsia/Tokyo
が設定されました。
mysql> SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;
+--------------------+---------------------+
| @@GLOBAL.time_zone | @@SESSION.time_zone |
+--------------------+---------------------+
| Asia/Tokyo | Asia/Tokyo |
+--------------------+---------------------+
1 row in set (0.00 sec)
MySQLでタイムゾーンを設定する方法まとめ
今回はMySQLでタイムゾーンを設定する方法について書きました。
記事の内容をまとめると、下記のようになります。
・MySQLを再起動せずに、SETを使って一時的に設定することができる。
・設定ファイルに書くと、MySQLの起動時に設定したタイムゾーンが読み込まれる。
タイムゾーンは基本的には永続的に設定したいのかと思うので、設定ファイル(my.cnf)に書いておくほうが良いのかなと思いました。
コメント