Wie speichert man NULL-Werte in Datetime-Feldern in MySQL?
Habe ich eine "bill_date" Feld, das ich will leer sein (NULL), bis es in Rechnung gestellt wurden, an welcher Stelle das Datum eingegeben werden.
Sehe ich, dass MySQL nicht wie NULL-Werte in datetime-Felder. Nicht alle haben Sie eine einfache Möglichkeit, dies zu behandeln, oder bin ich gezwungen zu verwenden, die min Datum als "NULL " gleichwertig" und dann das Kontrollkästchen für dieses Datum?
Dank.
BEARBEITET, UM HINZUFÜGEN:
Ok, sehe ich, dass MySQL akzeptiert einen NULL-Wert, aber es wird nicht akzeptieren, es als ein Datenbank-update, wenn ich aktualisiere den Datensatz mit PHP.
Name der Variablen ist $bill_date
aber es wird nicht lassen Sie die variable als NULL, wenn ich einen Datensatz aktualisieren, ohne dass ein Wert zu $bill_date
-- ich bekomme diese Fehlermeldung:
Database query failed: Incorrect datetime value: '' for column 'bill_date' at row 1
Ich nehme an, ich brauche, um tatsächlich senden Sie das Wort NULL, oder lassen Sie es aus der update-Abfrage zusammen, um diesen Fehler zu vermeiden? Bin ich im Recht? Danke!!!
InformationsquelleAutor der Frage rhodesjason | 2009-11-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
MySQL hat ermöglichen
NULL
Werte fürdatetime
Felder. Habe es gerade getestet:Ich bin mit dieser version:
EDIT #1: ich sehe in deinem edit, dass die Fehlermeldung, die Sie erhalten in PHP zeigt an, dass Sie übergeben eine leere Zeichenfolge (D. H.
''
), nichtnull
. Eine leere Zeichenfolge ist anders alsnull
und ist keine gültigedatetime
Wert, die ist, warum Sie immer diese Fehlermeldung. Sie müssen übergeben Sie die spezielle sql-Schlüsselwortnull
wenn es das ist, was du meinst. Auch setzen Sie keine Anführungszeichen um das Wortnull
. Siehe meineinsert
Anweisung oben für ein Beispiel zum einfügennull
.EDIT #2: verwenden Sie PDO? Wenn ja, Wann binden Sie Ihr null-param, stellen Sie sicher, dass Sie die
[PDO::PARAM_NULL][1]
geben Sie bei der Bindung einernull
. Finden Sie die Antwort auf diese stackoverflow-Fragewie man richtig einfügennull
mit PDO.InformationsquelleAutor der Antwort Asaph
Dies ist eine sinnvolle Punkt.
Einen null-Datum ist nicht ein null-Datum. Sie können gleich Aussehen, aber Sie werden nicht. In mysql ein null-Datum-Wert null ist. Ein null-Datum-Wert ist eine leere Zeichenfolge (") und '0000-00-00 00:00:00'
Auf ein null-Datum "... wo mydate = "" fehl.
Auf eine leere/null-Datum "... wo mydate ist null" Fehler.
Aber jetzt lassen Sie ' s get funky. In der mysql-Termine, leer/null Datum sind genau das gleiche.
durch Beispiel
werden BEIDE ausgegeben: '0000-00-00 00:00:00'. wenn Sie ein update myDate mit " oder '0000-00-00 00:00:00', beide wählt immer noch die gleiche Arbeit.
In php, die mysql-null-Termine geben wird respektiert, mit dem standard-mysql-connector, und real sein, null-Werte ($var === null, is_null($var)). Leer Termine werden immer dargestellt als '0000-00-00 00:00:00'.
Ich dringend raten, zu verwenden, nur null-Daten, ODER nur leere Daten, wenn Sie können. (einige Systeme verwenden "virual" null-Termine gültigen Gregorianischen Daten, wie 1970-01-01 (linux) oder 0001-01-01 (oracle).
leer-Termine sind einfacher in php/mysql. Sie haben nicht das "wo-Feld ist null" zu behandeln. Sie müssen allerdings "manuell", verwandeln die '0000-00-00 00:00:00' Datum in " zur Anzeige leere Felder. (zum speichern oder suchen Sie müssen nicht speziellen Fall zu handhaben und für die null-Termine, das ist schön).
Null-Termine brauchen bessere Betreuung. Sie müssen vorsichtig sein, wenn Sie einfügen oder aktualisieren, fügen Sie KEINE Anführungszeichen um null, sonst eine null Datum eingefügt wird, statt der null, wodurch Sie Ihre standard-Daten-Chaos. In der Suche nach Formen, die Sie benötigen, um Fälle zu behandeln wie "und mydate ist nicht null", und so weiter.
Null-Termine sind in der Regel mehr Arbeit. aber Sie ist viel viel VIEL schneller als null-Daten für Abfragen.
InformationsquelleAutor der Antwort roselan
Es hängt davon ab, wie erklären Sie sich Ihren Tisch. NULL würde nicht erlaubt werden, in:
Aber es würde erlaubt werden, in:
Der zweite ist der Standard, also muss jemand habe aktiv beschlossen, dass die Spalte keine null-Werte zulassen.
InformationsquelleAutor der Antwort Andomar
Hatte ich dieses problem unter windows.
Dies ist die Lösung:
Pass " für NULL sollten Sie deaktivieren STRICT_MODE (die standardmäßig aktiviert ist, auf Windows-Installationen)
BTW Es ist lustig zu pass " für NULL. Ich weiß nicht warum, Sie lassen diese Art von Verhalten.
InformationsquelleAutor der Antwort abzarak
Ich habe gerade getestet in MySQL v5.0.6 und die datetime-Spalte null angenommen, ohne Frage.
InformationsquelleAutor der Antwort Rob
Für was es Wert ist: ich wurde mit einem ähnlichen Problem versucht, zu aktualisieren, eine MySQL-Tabelle über Perl. Würde das update fehlschlagen, wenn eine leere Zeichenfolge (übersetzt aus dem ein null-Wert aus einer gelesen, die von einer anderen Plattform) wurde verabschiedet, um die Datum-Spalte ('dtcol' im code-Beispiel unten). Ich war schließlich erfolgreich, bekommen die Daten aktualisiert, mithilfe einer IF-Anweisung eingebettet in meiner update-Anweisung:
InformationsquelleAutor der Antwort Joe M
Speziell in Bezug auf die Fehler, die Sie bekommen, können Sie nicht etwas tun, wie diese in PHP für eine null-Feld in MySQL:
Da null in PHP entspricht einer leeren Zeichenkette, die nicht das gleiche wie ein NULL-Wert in MysQL. Anstatt Sie dies tun möchten:
Natürlich Sie müssen nicht zu verwenden is_null aber ich vermute, dass es zeigt den Punkt ein wenig besser. Wahrscheinlich auch sicherer empty() oder so ähnlich. Und wenn $col2 passiert zu sein, eine Zeichenfolge, die würden Sie einschließen in doppelte Anführungszeichen in der query vergessen Sie nicht nicht auch diejenigen einschließen, um die 'NULL' - string, sonst wird es nicht funktionieren.
Hoffe, das hilft!
InformationsquelleAutor der Antwort Lukey
Ich habe gerade entdeckt, dass MySQL nehmen, null, vorausgesetzt, die Standardeinstellung für das Feld null ist, und ich Schreibe bestimmte if-Anweisungen, und lassen Sie die Anführungszeichen. Dies funktioniert für die Aktualisierung als auch.
InformationsquelleAutor der Antwort postmarkis