Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL Valeur par défaut non valide pour l'horodatage lorsqu'aucune valeur par défaut n'est donnée.

Bien que @jsnplank ait raison de dire que les horodatages sont traités différemment et que vous devriez envisager d'utiliser le type de données datetime pour ces 2 colonnes particulières, cependant, il n'explique pas le message d'erreur.

Le message d'erreur est probablement le résultat d'une combinaison de la façon dont mysql traite les champs d'horodatage lorsqu'aucune valeur par défaut n'est fournie et de vos paramètres de mode sql.

  1. Vous définissez les deux colonnes d'horodatage comme non nulles, sans aucune valeur par défaut spécifique définie. Cela signifie que la valeur par défaut de la 1ère colonne d'horodatage sera current_timestamp() et sera également mise à jour vers current_timestamp() chaque fois que l'enregistrement change. C'est pourquoi le 1er champ timestamp ne génère pas de message d'erreur, peu importe lequel des 2 est le 1er.

    Cependant, la valeur par défaut de la deuxième colonne d'horodatage non nulle sera '0000-00-00 00:00:00' si vous ne définissez pas explicitement une valeur par défaut.

    Voir cet article de blog pour plus de détails .

  2. Probablement no_zero_date Le mode SQL est également activé sur votre serveur, soit explicitement, soit dans le cadre du mode SQL strict. Ce mode SQL génère une erreur si vous souhaitez définir '0000-00-00 00:00:00' comme valeur par défaut ou si vous souhaitez insérer cette valeur dans n'importe quel champ de date.

Ainsi, vous pouvez utiliser le type de données d'horodatage dans votre table, mais rendre le 2ème soit nullable ou fournir 0 ou toute date valide (telle que l'époque) comme valeur par défaut explicite.

Étant donné que vous marquez les dates de début et de fin avec ces champs, utiliser datetime au lieu de timestamp comme type de données peut être une bonne idée.