mysql connector/j 8 serverTimezone

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 プロパティは削除されました。

念のため、ソースも見てみましたが、動きとしては(詳細まで追ってはいませんが)、次のように動作するのではないでしょうか。

  1. サーバのタイムゾーン(time_zoneパラメータか?)を取得してそのタイムゾーンに変換しようとします。
  2. serverTimezone が指定されていると、その値をサーバのタイムゾーンとみなして変換しようとします。

私の場合は、実際そのように動作していました。

1969年生まれ。大学卒業後から15年以上にわたり、通信、カードリーダ、セキュリティ業界においてソフトウェア開発に従事。その後、2012年5月に当社を設立。電力、交通、車載向けの組み込み系システム、旅行業界向けの WEB システム開発、音声合成システム、消防向けのシステム開発等に参画。
低コストかつシンプルで安定稼働するシステムの実現を目指し、アーキテクチャ設計に取り組んでいます。
会社情報と代表者守屋のプロフィール詳細