Chociaż @jsnplank ma rację, że znaczniki czasu są traktowane inaczej i powinieneś rozważyć użycie typu danych data/godzina dla tych 2 konkretnych kolumn, jednak nie wyjaśnia komunikatu o błędzie.
Komunikat o błędzie jest najprawdopodobniej wynikiem kombinacji sposobu, w jaki mysql traktuje pola znaczników czasu, gdy nie podano wartości domyślnej, oraz ustawień trybu sql.
-
Zdefiniuj obie kolumny sygnatury czasowej jako nie null, bez określonego zestawu wartości domyślnych. Oznacza to, że domyślną wartością pierwszej kolumny sygnatury czasowej będzie current_timestamp() i będzie również aktualizowana do current_timestamp() za każdym razem, gdy rekord się zmieni. Dlatego pierwsze pole znacznika czasu nie generuje komunikatu o błędzie, bez względu na to, który z nich jest pierwszym.
Jednak domyślną wartością drugiej kolumny sygnatury czasowej o wartości niezerowej będzie „0000-00-00 00:00:00”, jeśli nie zdefiniujesz jawnie wartości domyślnej.
-
Prawdopodobnie no_zero_date Tryb sql jest również włączony na serwerze bezpośrednio lub jako część trybu ścisłego sql. Ten tryb sql generuje błąd, jeśli chcesz ustawić „0000-00-00 00:00:00” jako wartość domyślną lub chcesz wstawić tę wartość do dowolnego pola daty.
Możesz więc użyć typu danych datownika w swojej tabeli, ale ustaw dla drugiego typu wartość null lub podaj 0 lub dowolną prawidłową datę (np. Epokę) jako jawną wartość domyślną.
Ponieważ zaznaczasz daty rozpoczęcia i zakończenia za pomocą tych pól, dobrym pomysłem może być podanie daty i godziny zamiast znacznika czasu jako typu danych.