Question

J'ai une colonne créée comme

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

Cependant, lorsque je télécharger des données à partir d'un fichier CSV avec la commande LOAD DATA avec une entrée vide pour date_start la valeur enregistrée est 00:00:00 0000-00-00?

Était-ce utile?

La solution

Le mode SQL MySQL par défaut permet l'absence de dates.

Ma conviction est que la commande LOAD DATA INFILE est en train de lire la position de vide destinée à être un DATETIME, et automatiquement à l'aide d'une date zéro avant l'insertion. Cela expliquerait pourquoi votre contrainte par défaut n'est pas appliquée -. La valeur est nulle lors de l'insertion

Je pense que vous avez deux options:

  1. Mettre à jour tous les blancs dans votre CSV à partir "," à "NULL, "ou"," DEFAULT, donc ils vont être discernables
  2. Modifier le mode SQL : SET SQL_MODE='NO_ZERO_DATE'

Autres conseils

NULL et « une entrée vide » ne sont pas toujours traités de la même dans MySql. Dans le cas du type de données datetime, les entrées vides sont automatiquement converties en 0:00:00 0000-00-00. Vous pouvez penser à cela comme une forme de transtypage, où un vide se typecast à zéro.

Dans votre fichier de données, essayez de remplacer toutes les dates vierges avec le mot-clé DEFAULT.

datetime signifie votre date de colonne stocke et heure au format Y-m-d H:i:s (0000-00-00 00:00:00).

date signifie que vos magasins de colonne date juste en format Y-m-d (de 0000-00-00).

Si vous ne spécifiez pas de valeur lors de l'insertion des données, la valeur par défaut est utilisé, mais lorsque vous insérez les données du fichier CSV ne spécifiez une valeur pour le champ, de sorte que le défaut ne soit pas utilisé.

Une entrée vide est une valeur non valide pour un champ de date-heure, de sorte que le 0000-00-00 00:00:00 de valeur est utilisée à la place, tout comme avec une valeur qui ne peut être analysée pour une date valide (ou une date partielle).

MySQL a ennuyeux (à mon avis) le comportement que dans certaines circonstances, si on leur donne une valeur non valide pour stocker dans une colonne, il va stocker une « valeur d'erreur » prédéfinie à la place. Par exemple, une date ou datetime contexte, il stocke le « zéro jour » vous avez remarqué; pour une colonne ENUM il va stocker « » (correspond à 0 dans un contexte numérique) en tant que valeur d'erreur.

Bien qu'il soit inélégante, vous pouvez essayer de faire l'importation et permettant aux invalides zéro dates à insérer, puis l'émission

UPDATE
    table_name
SET
    date_start = '1970-01-01 00:00:00'
WHERE
    date_start = '0000-00-00 00:00:00'
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top