Azure Database for MySQLでタイムゾーンを変える

今日は小ネタ。Azure Database for MySQLの動作について。

前提

Azure Database for MySQLは複数のMySQLのバージョンを選択できます。

docs.microsoft.com

また、使用する段階でどんどんバージョンが変わり、またMySQLはバージョン間で大きく仕様が変わります。今回使用したMySQLのバージョンは8.0.15を使用しました。

デフォルトの動作

例えば次のようなテーブルを作成しておきます。

CREATE TABLE mydb.table1 (
    id int NOT NULL AUTO_INCREMENT,
    description varchar(20),
    ts timestamp,
    PRIMARY KEY (id)
);

このテーブルのtsカラムにCURRENT_TIMESTAMPで値をinsertすると、デフォルトではUTCで日時がINSERTされます。

INSERT INTO mydb.table1 (description, ts) values ('aaaaa', CURRENT_TIMESTAMP');

f:id:miyohide:20200810174232p:plain

この仕様は「困る。日本時間にしてくれ」という話を聞くので、この対処方法を。

サーバーパラメータの変更

Azure Database for MySQLではポータルやCLIを使って各種パラメータの値を変更することができます。

docs.microsoft.com

このサーバーパラメータのうちtime_zoneを変更してみます。UTCから日本時間は9時間のズレですので、+9:00と設定しておきます。

f:id:miyohide:20200810175204p:plain

ちなみに、Asia/Tokyoと設定しようとするとうまく設定できませんでした。

f:id:miyohide:20200810175304p:plain

設定した値は保存後有効になります。再度、SELECTを発行すると、日本時間で返ってきました。

f:id:miyohide:20200810175419p:plain

次回予告(次回への宿題)

とりあえず、カラムの型がTIMESTAMPであるときにはこれで大丈夫そうです。ただ、MySQLにはDATETIME型があり、TIMESTAMP型とはいろいろと挙動が異なるようです。

tmtms.hatenablog.com

今度はDATETIME型を使った挙動を調べたいと思います(深みに嵌りそうな気がしますが...)。