今日は小ネタ。Azure Database for MySQLの動作について。
前提
Azure Database for MySQLは複数のMySQLのバージョンを選択できます。
また、使用する段階でどんどんバージョンが変わり、また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');
この仕様は「困る。日本時間にしてくれ」という話を聞くので、この対処方法を。
サーバーパラメータの変更
Azure Database for MySQLではポータルやCLIを使って各種パラメータの値を変更することができます。
このサーバーパラメータのうちtime_zone
を変更してみます。UTCから日本時間は9時間のズレですので、+9:00
と設定しておきます。
ちなみに、Asia/Tokyo
と設定しようとするとうまく設定できませんでした。
設定した値は保存後有効になります。再度、SELECTを発行すると、日本時間で返ってきました。
次回予告(次回への宿題)
とりあえず、カラムの型がTIMESTAMP
であるときにはこれで大丈夫そうです。ただ、MySQLにはDATETIME
型があり、TIMESTAMP
型とはいろいろと挙動が異なるようです。
今度はDATETIME
型を使った挙動を調べたいと思います(深みに嵌りそうな気がしますが...)。