Edited at

RDS(MySQL)でJSTを使う たった1つの冴えたやり方

More than 3 years have passed since last update.


RDS(MySQL)でJSTを使う たった1つの冴えたやり方


RDS(MySQL)のシステム標準設定はUTCかつ変更不可能

$ date

2014年 5月30日 金曜日 20時56分02秒 JST
$ echo 'select now()' | mysql -h mysql.foobar.ap-northeast-1.rds.amazonaws.com -u admin -p
Enter password:
now()
2014-05-30 11:56:20


アンチパターン


init_connect に "SET SESSION time_zone = 'Asia/Tokyo';"と書く

→フェイルオーバー時にハマる (rdsadminユーザなどではTimezoneがUTCでないとダメ)


ストアドプロシージャを入れて init_connect から呼ぶ

例)

IF NOT (POSITION(‘rdsadmin@’ IN CURRENT_USER()) = 1) THEN

SET SESSION time_zone = ‘Asia/Tokyo’;
END IF

→ ストアド入れる前にパラメータグループ適用しちゃったりとかでハマる


おそらく一番簡単なやり方

下記をinit_connectに設定する

SET SESSION time_zone = CASE WHEN POSITION('rds' IN CURRENT_USER()) = 1 THEN 'UTC' ELSE 'Asia/Tokyo' END;

rdsで始まるユーザ名であった場合UTCを、そうでない場合には日本時間に設定

適用後)

$ date

2014年 5月30日 金曜日 21時04分48秒 JST
$ echo 'select now()' | mysql -h mysql.foobar.ap-northeast-1.rds.amazonaws.com -u admin -p
Enter password:
now()
2014-05-30 21:04:57

日本時間になりました!