2017-10-17 1 views
3

Mit einem SQL-Fehler 2018-9-31 tritt in die Datenbank nicht zu sicher, warum ich alle 0 nur an diesem Datum bekomme. Jede Hilfe wird sehr geschätzt, es passiert jeden 3. Quartal.PHP SQL tritt alle 9 Monate Null

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') 

kehrt

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

Dank Fehler in einfügen, ja, ich habe letztes Datum für den ersten Monat hinzugefügt, anstelle des 3. Monats in ..... –

+0

@ishegg ist ganz richtig. Ich habe versucht herauszufinden, WARUM!?!?!?! das macht keinen Sinn!!! dann überprüfte ich es und es brachte mich zum lachen :) viel glück – koksalb

Antwort

2

September hat nur 30 Tage. Also 2018-9-31 ist ein ungültiges Datum, daher wird der Standardwert eingefügt.

Ich würde empfehlen, dies nicht dem Zufall zu verlassen und entweder gültige Daten in der Anwendung überprüft oder lassen MySQL durch enabling strict mode Griff:

Wenn Strict-Modus aktiviert ist, ‚0000-00-00‘ ist nicht zulässig und Einfügungen erzeugen einen Fehler, es sei denn, IGNORE wird ebenfalls angegeben. Für INSERT IGNORE und UPDATE IGNORE ist '0000-00-00' zulässig, und Einfügungen erzeugen eine Warnung.

Oder Sie auch NO_ZERO_DATE verwenden können:

Der NO_ZERO_DATE Modus beeinflusst, ob die Server erlaubt '0000-00-00' als gültiges Datum. Die Wirkung hängt auch davon ab, ob der strikte SQL-Modus aktiviert ist.

0

Sie haben nicht angegeben, dass Sie MySQL verwenden, aber ich wette so: Dies ist ein MySQL Gotcha. Wenn Sie nicht sagen, dass MySQL streng ist und eine gewisse Menge an Setups ausführt, "arbeitet" MySQL still, auch wenn es nicht so sein sollte. Sie sind gerade auf einen solchen Fall gestoßen.

In diesem Fall hat der September nur 30 Tage, daher ist der 31. September ein falsches Datum. Anstatt zu versagen, hat MySQL ungültige Daten in Ihre Datenbank eingegeben. Um dies zu vermeiden und/oder Ihre Fehler früher zu sehen, schlagen Sie vor, InnoDB (nicht MyISAM) und enabling strict mode zu verwenden.

Wenn Sie dies über die Befehlszeile ausführen würden, würde die Schnittstelle Ihnen eine Anzahl von Warnungen anzeigen, nach der Sie 'SHOW WARNINGS' ausführen würden, um sie anzuzeigen.

Weiterhin von the documentation:

MySQL ermöglicht ein „entspanntes“ Format für Werte als Strings angegeben, in dem jedes Interpunktionszeichen kann als Trennzeichen zwischen Datum oder Zeiteinheiten verwendet werden. In einigen Fällen kann diese Syntax täuschen. Ein Wert wie "10: 11: 12" könnte beispielsweise aufgrund von: wie ein Zeitwert aussehen, wird aber in einem Datumskontext als das Jahr "2010-11-12" interpretiert. Der Wert '10: 45: 15' wird in '0000-00-00' konvertiert, da '45' kein gültiger Monat ist.