新MySQL中的旧日期比较处理

时间:2011-07-22 14:31:22

标签: mysql

MySQL 5.0的迁移指南说DATE和DATETIME之间的比较方式已经改变。

  

不兼容的更改:从MySQL 5.0.42开始,当DATE值与DATETIME值进行比较时,通过将时间部分添加为00:00:00,将DATE值强制转换为DATETIME类型。以前,DATETIME值的时间部分被忽略,或者比较可以作为字符串比较执行。要模仿旧行为,请使用CAST()函数使比较操作数与以前一样处理。例如:

所以例如“select ... where my_date&lt; now()”现在进行DATETIME比较(今天00:00:00包括)并用于进行DATE比较(今天不包括)。< / p>

是否有例如一个MySQL配置选项,它启用旧的行为?我找不到任何东西,但这并不一定意味着它不存在。

我们有&gt; 100个KLOC代码,包含多个关于计费的SQL语句,这些语句都依赖于旧日期处理。

1 个答案:

答案 0 :(得分:4)

如果您依赖计费系统,我甚至不会考虑在没有重大改写的情况下升级数据库。

首先,日常处理(总是有问题的)需要从常规代码中移出,以便更容易管理。没有人真正做好日期处理,你需要与未来的变化保持隔离。所以现在修理它会帮助你下次。您甚至可以考虑将日期计算移出数据库,并牢牢地插入您的控件(即代码中),但这可能对您的系统不可行。

其次,如果你还没有,我会创建一个严格的回归测试套件,这样你就可以找到所有其他的小东西(而不是那么少)。如果您确实找到了“设置”,这一点至关重要,因为确切的行为可能比您想要的更微妙。

这些升级很痛苦,尤其是,当他们解决问题时。有时最好只留下有效的东西,直到你需要移动其他更好的理由。