Frage

Ich habe eine Spalte erstellt wie

`date_start` datetime NOT NULL DEFAULT '1970-01-01'

Allerdings, wenn ich mit dem LOAD DATA-Befehl mit einem leeren Eintrag für date_start Daten aus einer CSV-Datei lade der gespeicherte Wert ist 0000-00-00 00.00.00?

War es hilfreich?

Lösung

Der MySQL-SQL-Modus standardmäßig erlaubt Nulldaten.

Meine Überzeugung ist, dass die LOAD DATA INFILE Befehl der leere Position liest sollte ein DATETIME- sein, und automatisch ein Nulldatum vor dem Einsetzen verwenden. Dies würde erklären, warum Ihre Standardeinschränkung nicht angewandt werden -. Der Wert nicht null ist, wenn sie eingesetzt wird,

Ich glaube, Sie haben zwei Möglichkeiten:

  1. Aktualisieren Sie alle die Rohlinge in Ihrer CSV-Datei "" auf "NULL, "oder", DEFAULT", so dass sie korrekt interpretiert werden wird
  2. Ändern Sie den SQL-Modus : SET SQL_MODE='NO_ZERO_DATE'

Andere Tipps

NULL und ‚ein leerer Eintrag‘ sind nicht immer gleich in MySql behandelt. In dem Fall des datetime Datentypen werden leere Einträge automatisch 0000-00-00 00.00.00 umgewandelt. Sie können als eine Form der Schublade gesteckt daran denken, wo eine leere Typumwandlung auf Null wird.

In der Datendatei, versuchen, alle leere Daten mit dem DEFAULT Schlüsselwort zu ersetzen.

datetime bedeutet, dass Ihre Spalte speichert Datum und Uhrzeit im Format Y-m-d H:i:s (0000-00-00 00:00:00).

date bedeutet, dass Ihre Spalte speichert nur Datum im Format Y-m-d (0000-00-00).

Wenn Sie keinen Wert angeben, wenn Einfügen von Daten, wird der Standard verwendet, aber wenn Sie fügen die Daten aus der CSV-Datei nicht sie einen Wert für das Feld an, so dass der Standard nicht verwendet wird.

Ein leerer Eintrag ist ein ungültiger Wert für ein Datetime-Feld, so dass der Wert 0000-00-00 00:00:00 stattdessen verwendet wird, wie bei jedem Wert, der (oder eine Teildatum) kann nicht auf ein gültiges Datum analysiert werden.

hat MySQL das lästige (meiner Meinung nach) Verhalten, das unter Umständen gegeben, wenn ein ungültigen Wert zu speichern, in einer Spalte, speichert es einen vordefinierte „Fehlerwert“ statt. Zum Beispiel in einem Datum oder Datetime-Kontext wird es speichern Sie die „Null-date“ Sie bemerkt haben; für eine ENUM-Spalte wird es speichern ‚‘ (entspricht 0 in einem numerischen Kontext) als Fehlerwert.

Obwohl es unelegant ist, könnten Sie den Import versuchen zu tun und damit die ungültigen Nulldaten eingefügt werden, und dann die Ausgabe

UPDATE
    table_name
SET
    date_start = '1970-01-01 00:00:00'
WHERE
    date_start = '0000-00-00 00:00:00'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top