sql >> Database >  >> RDS >> Mysql

MySQL Ongeldige standaardwaarde voor tijdstempel als er geen standaardwaarde is opgegeven.

Hoewel @jsnplank gelijk heeft dat tijdstempels anders worden behandeld en u zou moeten overwegen om datetime-gegevenstype te gebruiken voor deze 2 specifieke kolommen, legt hij de foutmelding niet uit.

De foutmelding is hoogstwaarschijnlijk het resultaat van een combinatie van de manier waarop mysql tijdstempelvelden behandelt wanneer er geen standaardwaarde is opgegeven en uw instellingen voor de sql-modus.

  1. U definieert beide tijdstempelkolommen als niet null, zonder dat er een specifieke standaardwaarde is ingesteld. Dit betekent dat de standaardwaarde van de eerste tijdstempelkolom current_timestamp() is en ook wordt bijgewerkt naar current_timestamp() wanneer de record verandert. Dit is de reden waarom het 1e tijdstempelveld geen foutmelding genereert, ongeacht welke van de 2 de 1e is.

    De standaardwaarde van de 2e niet-null-tijdstempelkolom is echter '0000-00-00 00:00:00' als u niet expliciet een standaardwaarde definieert.

    Zie deze blogpost voor meer details .

  2. Waarschijnlijk no_zero_date sql-modus is ook expliciet ingeschakeld op uw server of als onderdeel van de strikte sql-modus. Deze sql-modus genereert een fout als u '0000-00-00 00:00:00' als standaardwaarde wilt instellen of als u deze waarde in een willekeurig datumveld wilt invoegen.

U kunt dus het gegevenstype tijdstempel in uw tabel gebruiken, maar maak de 2e nullable of geef 0 of een geldige datum (zoals het tijdperk) op als een expliciete standaardwaarde.

Aangezien u start- en einddatums met deze velden markeert, kan het een goed idee zijn om datetime in plaats van tijdstempel als datatype te gebruiken.



  1. Een variabele periode in een interval gebruiken in Postgres

  2. Detecteer emoticons in string

  3. PDO mislukt met te veel records, gebufferde query's

  4. spreidingsplot in jfreechart uit database