sql >> Databáze >  >> RDS >> Mysql

MySQL Neplatná výchozí hodnota pro časové razítko, když není zadána žádná výchozí hodnota.

Ačkoli má @jsnplank pravdu, že s časovými razítky se zachází jinak, a měli byste zvážit použití datového typu datetime pro tyto 2 konkrétní sloupce, nedokáže však vysvětlit chybovou zprávu.

Chybová zpráva je pravděpodobně výsledkem kombinace toho, jak mysql zachází s poli časových razítek, když není zadána žádná výchozí hodnota, a nastavením vašeho režimu SQL.

  1. Oba sloupce časových značek definujete jako nenulové, bez nastavené konkrétní výchozí hodnoty. To znamená, že výchozí hodnota sloupce 1. časového razítka bude current_timestamp() a bude také aktualizována na current_timestamp() při každé změně záznamu. To je důvod, proč pole 1. časového razítka negeneruje chybovou zprávu, bez ohledu na to, které z těchto 2 je první.

    Pokud však explicitně nedefinujete výchozí hodnotu, bude výchozí hodnota 2. nenulového sloupce časového razítka '0000-00-00 00:00:00'.

    Další podrobnosti naleznete v tomto příspěvku na blogu .

  2. Pravděpodobně no_zero_date Režim sql je také povolen na vašem serveru buď explicitně, nebo jako součást přísného režimu SQL. Tento režim SQL generuje chybu, pokud chcete nastavit '0000-00-00 00:00:00' jako výchozí hodnotu nebo chcete vložit tuto hodnotu do libovolného pole data.

Ve své tabulce tedy můžete použít datový typ časové razítko, ale u druhého nastavte buď hodnotu null, nebo uveďte 0 nebo jakékoli platné datum (například epochu) jako explicitní výchozí hodnotu.

Vzhledem k tomu, že těmito poli označujete počáteční a koncové datum, může být dobré použít datum a čas místo časového razítka jako datový typ.



  1. SQL tabulka s položkou seznamu vs SQL tabulka s řádkem pro každou položku

  2. V dotazu SQL je lepší použít méně než rovno nebo v

  3. Příklady ATN2() v SQL Server

  4. Vkládání náhodných čísel do tabulky v MYSQL