- - PR -
MySQLのTimestampについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-06-13 15:29
sinと申します。
現在 Windows XP Home SP1 Java 1.4.2_08 MySQL 4.0.24 connector-j mysql-connector-java-3.1.8-bin.jar という環境でJDBCを利用してMySQLに接続し以下の処理を行っています。 1.Aテーブルからselect文でTimestamp型のデータを取得。 2.Bテーブルへのselect文のwhere句に1.で取得(getTimestamp)したデータを setTimestampでセットして実行。 この処理で2.を実行する前にlog4jを使用し log.debug(PreparedStatement)でsetTimestampした値を見ると 年が-1900され、月が-1された値が設定されてしまい困っています。 別の環境として、 White Box Enterprise Linux release 3.0 Java 1.4.2_06 MySQL 4.0.23a connector-j mysql-connector-java-3.1.8-bin.jar では正常にDBに設定された値が表示されます。 MySQLのバージョンの違いのためか、LinuxとWindowsの違いの ためか、なぜ発生しているのかよくわからない状況です。 よろしくお願いいたします。 | ||||
|
投稿日時: 2005-06-13 16:09
接続先のDBのバージョンやJDBCドライバのバージョンを切り替えて切り分けしてみてはいかがでしょうか。
| ||||
|
投稿日時: 2005-06-13 16:14
こんにちは、moneです。
と、ありますが 2005年の場合は105年になってしまうのですか?? また、処理2を実行する際に 一致してほしいTimestampと一致しないということなのでしょうか? それとも表示の際に正しい値にならなくて困っているということですか?? TimeStampの表示桁数はいくつになっているのでしょうか?? 自分の読解力不足であったり、 的外れな質問だったら申し訳ありません。 [ メッセージ編集済み 編集者: mone 編集日時 2005-06-13 16:37 ] | ||||
|
投稿日時: 2005-06-14 00:57
返信、ありがとうございます。
インギさん 引用--------------------------------------------------------- 接続先のDBのバージョンやJDBCドライバのバージョンを切り替えて切り分けしてみてはいかがでしょうか。 -------------------------------------------------------------------------- やはり、それが一番原因を調べるには確実かもしれないですね。 moneさん 引用--------------------------------------------------------- 2005年の場合は105年になってしまうのですか?? また、処理2を実行する際に 一致してほしいTimestampと一致しないということなのでしょうか? それとも表示の際に正しい値にならなくて困っているということですか?? TimeStampの表示桁数はいくつになっているのでしょうか?? -------------------------------------------------------------------------- すいません、少し説明が不足してました。 指摘のとおり、2005年が105年となってしまいます。 処理2では、一致してほしいTimestampと一致しない状況となっています。 また、テーブルの作成時にTimestampの桁数の指定はしていないため 14桁となっています。 まだ、調査中ですが、インギさんのいわれているように バージョンを変更して調べてみようと思います。 | ||||
|
投稿日時: 2005-06-14 01:49
sinさん、こんにちは。
Timestampオブジェクトの表示や比較をどのように行ったか にも依ると思いますが、 Timestampのスーパクラスである Dateの APIドキュメント にある、
と書かれているのと関係あるのではないでしょうか? | ||||
|
投稿日時: 2005-06-14 14:13
こんにちは、moneです。
あ、スーパークラスがDate型だったんですね、見落としていました。。。 と、言う事はJava側がTimestamp型で受け取った際に勝手に変換してしまっているためにうまくいかないということかな。 では、取得時に変換されないようにStringかなんかでうけとって SQL側で日付に変換(ToDate)とかしてあげれば うまくいきそうですね。 |
1