2013-02-19 767 views
2

我被要求對現有應用程序進行更改,此時該應用程序目前僅部署到Linux生產服務器。我已經開始了,並且大部分應用程序都在我的本地Windows PC上工作。我在本地PC上安裝了Production的MySQL DB的完整副本。生產數據庫在Linux上是MySQL v5.0.95,我的本地數據庫在Windows上是MySQL v5.5。兩者都處於InnoDB模式。MySQL錯誤代碼:1411.錯誤的日期時間值:''用於函數str_to_date

我的問題是與如下的聲明。由其他人希望提供幫助,便於通用。

update atable 
set adate=DATE_ADD(str_to_date('','%m/%d/%Y'), INTERVAL 0 DAY) 
where anum='1' 

在某些情況下,一個空字符串傳遞,其中在生產不會造成任何問題,並允許記錄要保存/更新,但本地它拋出一個SQLException。所以我直接對我的本地數據庫嘗試SQL語句,並在兩種情況下都收到以下錯誤消息。

錯誤代碼:1411不正確的日期時間值:「」的功能 STR_TO_DATE

我已經看了生產my.cnf和我的地方my.ini尋找任何重大分歧,我也試着在本地使用sql-mode「ALLOW_INVALID_DATES」,但它沒有改變最終結果。

我知道我可以修改代碼,無法在這些空字符串傳中,但也有這樣的,在這個時候,我不希望更改所有這些可能的話許多語句。該客戶的預算和時間有限,我希望專注於他們的新需求。如果可能,我正在尋找關於如何讓我的本地環境正常運行的輸入信息。

謝謝你的時間。

+1

''''不是有效的日期..應該添加什麼日期?當前日期? – 2013-02-19 15:48:19

+0

不,它在本地和生產中傳遞一個空字符串。我知道這很奇怪,我不確定它是如何在生產中工作的,但它是。 – ItBHarsH 2013-02-19 15:50:53

回答

5

SQLException不會直接從MySQL來的,它可能是你的客戶端語言觸發。 MySQL只會產生一個你通常可以忽略的警告。不管結果如何,該ALLOW_INVALID_DATES SQL模式應該實際上做的伎倆:

警告:

mysql> SET @@SESSION.sql_mode='NO_ZERO_DATE,NO_ZERO_IN_DATE'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> insert into test (date_created) VALUES (str_to_date('','%m/%d/%Y')); 
Query OK, 1 row affected, 1 warning (0.01 sec) 

mysql> show warnings; 
+---------+------+-------------------------------------------------------+ 
| Level | Code | Message            | 
+---------+------+-------------------------------------------------------+ 
| Warning | 1411 | Incorrect datetime value: '' for function str_to_date | 
+---------+------+-------------------------------------------------------+ 
1 row in set (0.00 sec) 

無警告:

mysql> SET @@SESSION.sql_mode='ALLOW_INVALID_DATES'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> insert into test (date_created) VALUES (str_to_date('','%m/%d/%Y')); 
Query OK, 1 row affected (0.03 sec) 

編輯:如果你正在尋找一種方式來改寫查詢,你可以嘗試這樣的事:

update atable 
set adate=NULL 
where anum='1' 

當然,這要求adate可以爲空。

+0

對不起,如果我不清楚。我在我的代碼中得到了SQLException,它報告了在MySQL Workbench的查詢窗口中運行查詢時得到的錯誤。下面的輸出是我直接在MySQL Workbench查詢窗口中直接執行原始查詢以外的代碼。 'ACTION:更新atable 組ADATE = DATE_ADD(STR_TO_DATE( 'XXX', '%米/%d /%Y'),INTERVAL 0天) 其中ANUM = '1' 消息:錯誤代碼:1411 。不正確的日期時間值:''for function str_to_date' 這種情況發生在my.ini中啓用或不啓用'ALLOW_INVALID_DATES'模式。 – ItBHarsH 2013-02-19 16:54:05

+0

因此,您的代碼和Workbench都會將警告報告爲錯誤。不知道你想要什麼答案 - 你可以放鬆SQL模式以避免基本警告,或者你可以改變查詢。這基本上都是。 – 2013-02-19 16:59:54

+0

正如我所提到的,我嘗試了ALLOW_INVALID_DATES模式,並沒有幫助。生產服務器沒有定義任何模式。我一直在看SQL模式文檔,不知道還有什麼其他選項可以嘗試。建議? --- BTW感謝您的所有輸入! – ItBHarsH 2013-02-19 18:02:22