2012-10-16 8 views
5

Di seguito è riportato l'istruzione CREATE TABLE utilizzata per creare la mia tabella:0000-00-00 00:00:00 inserito come MySQL DateTime

CREATE TABLE IF NOT EXISTS `data_received` (
`id` int(10) unsigned NOT NULL, 
`edit_time` datetime NOT NULL} 

Qui di seguito è come i dati vengono salvati nella tabella se il valore 'edit_time' è non fornito:

id edit_time 
1 0000-00-00 00:00:00 

Ora, se eseguo la seguente dichiarazione:

ottengo risultato: NULL

Qualcuno può aiutarmi a capire cosa sta succedendo?

risposta

4

Questo perché 0000-00-00 00:00:00 non è una valida espressione DATETIME accettata dalla funzione.

Controllare documentation.

2

Utilizzare questo metodo per mantenere modificare in tempo a mysql

`edit_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Auto-update time' 
+0

Grazie per la risposta. Puoi spiegare come funziona "ON UPDATE CURRENT_TIMESTAMP"? –

+0

@ShahriarNKhondokar: Se si utilizza l'istruzione UPDATE per modificare i dati in una tabella, la colonna 'edit_time' verrà aggiornata all'ora corrente, , quindi non sarà necessario inserire/aggiornare il valore di' edit_time' direttamente nel database. e il valore 'edit_time' sarà sempre valido. –

1

0000-00-00 00:00:00 sarà probabilmente interpretata come null. E il confronto di null in un TIMESTAMPDIFF porterà al risultato null.

MySQL doc dice

In MySQL, la data zero è definita come '0000-00-00', anche se questa data è in sé considerato non valido.

0

Non c'è zero della zero nel anno zero, quindi non è possibile calcolare il tempo da allora:

SELECT TIMESTAMPDIFF(HOUR, '0000-00-00 00:00:00', NOW()) 

NULL

Apparentemente MySQL non hanno un problema con l'anno 0 stesso, poiché restituisce un risultato:

SELECT TIMESTAMPDIFF(HOUR, '0000-01-01 00:00:00', NOW()) 
2

Mysql tende a inserire errore nel tentativo di essere "utile". È meglio dirlo di non farlo impostando la modalità mysql in STRICT in modo che si comporti più come dovrebbe un database.

SET sql_mode='STRICT_ALL_TABLES' 

Per ulteriori dettagli, consultare lo manual.