2011-07-22 6 views
1

MySQL 5.0の移行ガイドによれば、DATEとDATETIMEの間の比較方法が変更されています。新しいMySQLの古い日付比較処理

非互換の変更:DATE値をDATETIME値と比較するのMySQL 5.0.42、以降では、DATE値は、夜12時00分00秒として時間部分を追加することによって、DATETIME型に強制されます。以前は、DATETIME値の時間部分が無視されたか、比較が文字列比較として実行されていました。古い動作を模倣するには、CAST()関数を使用して比較オペランドを以前と同じように処理します。

ですから、例えば「選択...今my_date <は、()ここで、」今(00:00:00今日含まれます)DATETIME比較を行うと、DATEの比較を行うために使用(ないであろう。たとえば、今日を含む)。

古い動作を可能にするMySQLの設定オプション?私はまだそれを見つけることができませんでしたが、それは必ずしもそこにないことを意味しません。

古いデータ処理に依存する課金に関する複数のSQL文を含む100以上のKLOCコードがあります。

+0

これはあなたに何の助けにもなりませんが、最初にDATETIMEとDATETIMEを比較することが許可された理由は不思議です。彼らが2つの異なったタイプであるなら、あなたはそれらの1つを投げつけられたはずです。 –

答えて

4

あなたが課金システムに頼っているのであれば、私は大規模な書き換えなしにデータベースをアップグレードするつもりはないでしょう。

いつも問題である日付処理のようなものは、より簡単に管理できるどこかに一般的なコードから移動する必要があります。誰も本当に日付処理がうまくいかず、将来の変更から隔離される必要があります。今度はそれを修正することで次回に役立つでしょう。日付の計算をデータベースから移動し、コントロール(つまりコード)にしっかりと移動させることも考えられるかもしれません。しかし、これはあなたのシステムでは実現できないかもしれません。

第2に、まだ1つも持っていなければ、厳格な回帰テストスイートを作成して、他のすべての小さなものを見つけることができます。あなたが気に入っているよりも微妙な振る舞いをするかもしれないので、あなたが「設定」を見つけた場合、これは非常に重要です。

これらのアップグレードは、苦労しているものの、修正するときは特にです。場合によっては、他のより良い理由のために移動する必要があるまで、機能するものだけを残す方がよい場合もあります。