mysql connector/j 8 serverTimezone
2019/09/05, last updated 2022/08/03 - moriya - ~2 Minutes
AWS RDS で mysql を使っていたのだが、以前はタイムゾーンを変えることができなかった。そのため、無理矢理 JST で日付や時刻をセットしている WEB アプリがあった。( Amazon RDS データベースインスタンスのタイムゾーンを変更する方法 によると今はサーバのタイムゾーンを変えられるらしい。)
この環境で動く Java の WEB アプリで mysql connector/j をバージョン 5 系からバージョン 8 系に変更したところ、時刻が正しく UTC でセットされるようになってしまった。
(current_timestamp などを指定すると UTC でセットされるだろうから、正しくないのを承知で)無理矢理 JST でセットしてほしいのだが、接続文字列を jdbc:mysql://〜&serverTimezone=Asia/Tokyo のようにすればよいようだ。
リファレンス: connector/j reference configuration properties
Changes in Connection Properties によると、8系では、5系にあった、useLegacyDatetimeCode プロパティは削除された。
念のため、 ソース も見てみたが、動きとしては(詳細まで追ってはいないが)、次のように動作するのではないだろうか。
- サーバのタイムゾーン(time_zoneパラメータか?)を取得してそのタイムゾーンに変換しようとする。
- serverTimezone が指定されていると、その値をサーバのタイムゾーンとみなして変換しようとする。
私の場合は、実際そのように動作していた。