Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL Valore predefinito non valido per timestamp quando non viene fornito alcun valore predefinito.

Sebbene @jsnplank abbia ragione sul fatto che i timestamp siano trattati in modo diverso e dovresti considerare di utilizzare il tipo di dati datetime per queste 2 colonne particolari, tuttavia, non riesce a spiegare il messaggio di errore.

Il messaggio di errore è molto probabilmente il risultato di una combinazione di come mysql tratta i campi timestamp quando non viene fornito alcun valore predefinito e le impostazioni della modalità sql.

  1. Definisci entrambe le colonne timestamp come non nulle, senza alcun valore predefinito specifico impostato. Ciò significa che il valore predefinito della prima colonna timestamp sarà current_timestamp() e verrà aggiornato anche a current_timestamp() ogni volta che il record cambia. Questo è il motivo per cui il 1° campo timestamp non genera un messaggio di errore, indipendentemente da quale dei 2 sia il 1°.

    Tuttavia, il valore predefinito della seconda colonna timestamp non nullo sarà '0000-00-00 00:00:00' se non si definisce esplicitamente un valore predefinito.

    Vedi questo post del blog per maggiori dettagli .

  2. Probabilmente no_zero_date la modalità sql è abilitata anche sul tuo server in modo esplicito o come parte della modalità sql rigorosa. Questa modalità sql genera un errore se desideri impostare '0000-00-00 00:00:00' come valore predefinito o se desideri inserire questo valore in qualsiasi campo data.

Quindi, puoi utilizzare il tipo di dati timestamp nella tua tabella, ma rendere il secondo nullable o fornire 0 o qualsiasi data valida (come l'epoca) come valore predefinito esplicito.

Poiché stai contrassegnando le date di inizio e di fine con questi campi, potrebbe essere una buona idea utilizzare datetime anziché timestamp come tipo di dati.