2017-10-17 55 views
3

發生sql錯誤2018-9-31在數據庫中輸入0000-00-00不太確定爲什麼我只能在該日期獲得全部0。任何幫助非常感謝,它發生每隔三季度插入。PHP SQL每9個月輸入一次空格

INSERT INTO leagues(start,Name,type,end,cashstock) VALUES('2018-4-1', 'Quarter 2 2018', 'public', '2018-6-30', '7500') 
INSERT INTO leagues(start,Name,type,end,cashstock) VALUES('2018-7-1', 'Quarter 3 2018', 'public', '2018-9-31', '7500') 

回報

Edit Edit 
Copy Copy 
Delete Delete 
2018-04-01 
Quarter 2 2018 
3 
public 
2018-06-30 
7500 

Edit Edit 
Copy Copy 
Delete Delete 
2018-07-01 
Quarter 3 2018 
4 
public 
0000-00-00 
7500 
+0

感謝錯誤,是的,我將第一個月的最後日期,而不是在3個月..... –

+0

@ishegg是完全正確的。我試圖弄清楚爲什麼!?!?!?!這個不成立!!!然後我檢查它,它讓我發笑:)祝你好運 – koksalb

回答

2

月只有30天。因此2018-9-31是無效的日期,因此插入默認的0000-00-00

我勸告你不要離開這個高達機會,無論是在你的應用程序確認有效日期,或者讓MySQL會enabling strict mode處理:如果啓用了嚴格模式

,「0000-00-00」是不允許和插入會產生一個錯誤,除非IGNORE被給出。對於INSERT IGNORE和UPDATE IGNORE,允許使用'0000-00-00',插入會產生警告。

或者你也可以使用NO_ZERO_DATE

的NO_ZERO_DATE模式會影響服務器是否允許 '0000-00-00' 爲有效日期。其效果也取決於是否啓用嚴格的SQL模式。

0

您還沒有聲明您使用的是MySQL,但我敢打賭:這是一個MySQL Gotcha。除非你告訴MySQL嚴格,並做了相當數量的設置,否則即使不應該,MySQL也會默默「運行」。你遇到過這種情況。

在這種情況下,9月只有30天,所以9月31日是不正確的日期。 MySQL並沒有失敗,而是將無效的數據輸入到數據庫中。爲了防止這種情況發生,或者及早看到你的錯誤,建議使用InnoDB(而不是 MyISAM)和enabling strict mode

如果您要從命令行運行此命令,界面會顯示警告計數,之後您將執行「顯示警告」來查看它們。

此外,從the documentation

的MySQL允許對指定爲字符串,其中任何標點字符可以被用作日期部分或時間部分之間的分隔符值的「鬆弛」的格式。在某些情況下,這種語法可能是騙人的。例如,像'10:11:12'這樣的值可能看起來像時間值,因爲:,但如果在日期上下文中使用,則會被解釋爲「2010-11-12年」。值'10:45:15'被轉換爲'0000-00-00',因爲'45'不是有效月份。在插入