2011-07-22 20 views
1

MySQL 5.0的遷移指南指出,在DATE和DATETIME之間進行比較的方式已更改。新MySQL中的舊日期比較處理

不兼容的變化:與MySQL 5.0.42,當DATE值與DATETIME值進行比較開始,DATE值是通過將時間部分爲00:00:00強制爲DATETIME類型。以前,DATETIME值的時間部分被忽略,或者比較可以作爲字符串比較來執行。爲了模仿舊的行爲,使用CAST()函數使比較操作數與之前一樣處理。例如:

因此,例如,「選擇...其中my_date <現在()」現在做的比較DATETIME(其中包括今天在00:00:00),並用來做DATE比較(這將不包括今天)。

是否有例如一個MySQL配置選項,使舊的行爲?我還找不到,但這並不一定意味着它不在那裏。

我們擁有> 100 KLOC代碼,其中包含多個有關計費的SQL語句,這些語句都依賴於舊的日期處理。

+0

這對你沒有任何幫助,但我想知道你爲什麼被允許首先比較DATE和DATETIME。如果他們是兩種不同的類型,你應該被迫投下其中一個。 –

回答

4

如果您依賴計費系統,我甚至不會考慮在沒有大的重寫的情況下升級數據庫。

對於像日期處理這樣始終存在問題的東西,需要將其從通用代碼移出到特定位置,以便更容易地進行管理。沒有人真的在做日期處理,你需要與未來的變化隔離。現在修復它會在下次幫助你。您甚至可以考慮將日期計算從數據庫中移出並牢牢記錄到您的控制中(即在代碼中),但這可能對您的系統不可行。其次,如果你還沒有一個我會創建一個嚴格的迴歸測試套件,所以你可以找到所有其他破碎的東西(而不是那麼小)。如果你確實找到了「設置」,這是至關重要的,因爲確切的行爲可能比你想要的更微妙。

這些升級是一個痛苦,特別是當他們修復的事情。有時候最好停留在有用的東西上,直到你需要爲了其他更好的理由而移動。