私と私の猫の他は誰でも隠し事を持っている

野良プログラマ発、日々のアウトプット

RDS MySQL のタイムゾーン問題でもう一捻り

AWS RDS で MySQL を使ってる人の多くはご存知かと思いますが、default_time_zone が UTC のまま変更出来ないので NOW() 等の日時関数を使った時に困ったことになります。これを解決する為に、パラメタグループの init_connect に接続時のタイムゾーン変更処理を記述してやる方法が知られているようですね。ただ、細かいことですが、この方法はストアドプロシジャに依存しているので、このパラメタグループを適用したデータベースインスタンスを追加する度にプロシジャを登録しなけりゃならんってのが、ちょっとスッキリしません。

てな訳でもう一捻り。前述のストアドプロシジャの内容を関数ベースでワンライナーにして、init_connect に直に書いちゃうってだけですが(↓)。

SET SESSION time_zone = IF(POSITION('rdsadmin@' IN CURRENT_USER()) = 1,'UTC','Asia/Tokyo')

シングルクォートとか入ってて大丈夫かな? と思いましたが、今のところ問題なくいってます。