2009-12-01 61 views
0

免責聲明:這是我寧願不碰的老舊代碼庫所需要的。當應用於「日期」列時,是否有MySQL設置忽略日期時間常量的「時間」部分?

  • 有在具有DATE類型的列(以及許多其他)的數據庫中的表。
  • java.util.Date參數查詢(由Torque條件自動生成 - 不要求);扭矩將其格式化爲完整的日期時間。

因此,查詢MySQL是得到的是一樣的東西:

SELECT * FROM my_table 
WHERE my_date = '20091201105320'; // 2009-12-01 10:53:20 

的問題是,它擁有的MySQL 5.0.27標準的一臺服務器上它只是罰款 - 作爲回報所有記錄從my_table開始my_date設置爲'2009-12-01'。在另一臺具有MySQL 5.0.45的服務器上不起作用。數據在那裏 - 如果我在修剪時間部分後手動運行查詢,我會得到正確的結果。

的問題是:

是否有一個設置的地方,無論是在MySQL配置文件中或在每個會話變量(連接字符串)或其他地方,以強制MySQL忽略字符串常量日期轉換過程中的時間部分?

我顯然不能使用DATE()函數而不更改代碼庫,我寧願不要。

回答

1

顯然我運氣不好。從MySQL manual

在此之前的MySQL 5.0.42,當DATE值與DATETIME值相比,DATETIME值的時間部分被忽略,或作爲字符串比較,可以進行的比較。從MySQL 5.0.42開始,DATE值是通過將時間部分作爲'00:00:00'強制爲DATETIME類型。

如果有人發現自己處於類似的情況,我發現的唯一的解決方法是:

  1. 復位時間字段java.util.Date實例(時/分/秒)爲零。
  2. 修補程序(我的意思是「修補程序」 - 沒有辦法插入自己的適配器)getDateString() Torque的MySQL數據庫適配器的方法(org.apache.torque.adapter.DBMM)檢查日期的時間字段是否爲零,如果是,使用「僅限日期」格式。
1

這比打補丁扭矩

Criteria cr = new Criteria(); 
DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); 
String fixedDate = dateFormat.format(date); 
cr.add("my_date", (Object)("my_date = '" + fixedDate + "'"), Criteria.CUSTOM); 
簡單
相關問題