mysqlでnow()を使用するためにタイムゾーンを設定する

投稿者: | 2016年10月18日

タイトルの通り、mysqlのタイムゾーン設定方法です。
まずはmysqlのタイムゾーンの設定を確認します。

mysql> SHOW VARIABLES LIKE '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | UTC    |
| time_zone        | SYSTEM |
+------------------+--------+
2 rows in set (0.00 sec)
mysql> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2016-08-18 23:16:51 |
+---------------------+
1 row in set (0.00 sec)

タイムゾーンはlinuxシステムの設定を使用しており、現在はUTCとなっています。
linuxのタイムゾーンを確認するとそのままUTCとなっております。

$ date
  Thu Aug 18 23:17:36 UTC 2016

まずはlinuxのタイムゾーンを日本時間に設定します。

$ cp /usr/share/zoneinfo/Japan /etc/localtime
$ vi /etc/sysconfig/clock

「ZONE=”UTC”」となっているところを「ZONE=”Asia/Tokyo”」に変更します。

ZONE="Asia/Tokyo"

設定が変更されているのを確認します。

$ date
  Fri Aug 19 08:19:13 JST 2016

mysqlを再起動します。

$ /etc/init.d/mysqld restart

再度mysqlのタイムゾーンを確認します。

mysql> SHOW VARIABLES LIKE '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | JST    |
| time_zone        | SYSTEM |
+------------------+--------+
2 rows in set (0.00 sec)
mysql> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2016-08-19 08:21:44 |
+---------------------+
1 row in set (0.00 sec)

タイムゾーンが日本時間になっています。
mysqlのタイムゾーンはデフォルトではlinuxのシステムを使用します。
このためlinuxのタイムゾーンを設定するだけで変更することができます。
本来であればmysql側の時刻を使用するのはあまりいいとは言えません。
理想的なのはアプリケーション側で時刻を設定しデータを投入することです。
今回はmysqlの簡単な利用を目的としているのでnow()を使用しました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です