MySQLのTIMESTAMP型のNULLをTorqueで扱おうとするとエラーかよ・・
最近、Oracleを使ってたんだけど、家で仕事するのにDBをMySQLを使おうと思ったら、すんなりいかなかったのでメモ。
Torqueを使ってるから、なるべくOracleとMySQLの両方で扱いやすいデータ型にしようとおもって、日付をTIMESTAMPにしたんだけど、これ必須じゃないと、Torqueでデータ取得しようとするエラーになっちゃった・・・
なんか、nullの場合、DBから取得した値が"0000-00-00 00:00:00"だから、変換できないって・・・
なんだよ、それ・・・
ということで、ググったら出てきた。
suz-lab: Connector/J(MySQL-JDBC)のzeroDateTimeBehavior
接続URLのパラメータとして、
zeroDateTimeBehavior
というものが用意されています。とり得る値として
exception : SQLExceptionをスロー(デフォルト)
convertToNull : nullを返す
round : "0001-01-01 00:00:00"を返す
というのがあり、どうやら接続パラメータにこれを指定するとよいとのこと。
と、いうことで
torque.dsfactory.(HOGEHOGE).connection.url = jdbc:mysql://127.0.0.1/java?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
を、Torque.propertiesに設定。
う〜ん、最初っから、NULLで扱ってくれればいいのに・・・