sql >> Databasteknik >  >> RDS >> Mysql

MySQL Ogiltigt standardvärde för tidsstämpel när inget standardvärde anges.

Även om @jsnplank har rätt i att tidsstämplar behandlas olika och du bör överväga att använda datetime datatype för dessa 2 specifika kolumner, men han misslyckas med att förklara felmeddelandet.

Felmeddelandet är troligen resultatet av en kombination av hur mysql behandlar tidsstämpelfält när inget standardvärde anges och dina sql-lägesinställningar.

  1. Du definierar båda tidsstämpelkolumnerna som inte null, utan något specifikt standardvärde. Det betyder att den första tidsstämpelkolumnens standardvärde kommer att vara current_timestamp() och kommer också att uppdateras till current_timestamp() när posten ändras. Det är därför det första tidsstämpelfältet inte genererar ett felmeddelande, oavsett vilken av de två som är den första.

    Den andra inte null tidsstämpelns standardvärde kommer dock att vara '0000-00-00 00:00:00' om du inte uttryckligen definierar ett standardvärde.

    Se det här blogginlägget för mer information .

  2. Förmodligen no_zero_date sql-läge är också aktiverat på din server antingen uttryckligen eller som en del av strikt sql-läge. Detta sql-läge genererar ett felmeddelande om du vill ställa in '0000-00-00 00:00:00' som ett standardvärde eller om du vill infoga detta värde i ett datumfält.

Så du kan använda tidsstämpeldatatyp i din tabell, men gör den andra antingen nollbar eller ange 0 eller något giltigt datum (som epoken) som ett explicit standardvärde.

Eftersom du markerar start- och slutdatum med dessa fält, kan det vara en bra idé att ändra datumtid istället för tidsstämpel som datatyp.



  1. Enkel parametrering och triviala planer — Del 1

  2. Hur man byter databas med PostgreSQL

  3. Hur man uppdaterar länkade tabeller i Access 2016 efter att backend-databasen flyttats till en ny plats

  4. MySQL:hur gör man säkerhet på radnivå (som Oracles virtuella privata databas)?