Qual è il formato DateTime corretto per il database MySQL?

Sto inserendo questi dati DateTime '12/21/2012 1:13:58 PM' nel mio database MySQL usando questa stringa SQL:

 String Query = "INSERT INTO `restaurantdb`.`stocksdb` (`stock_ID`,`stock_dateUpdated`) VALUES ('@stockID' '@dateUpdated'); 

e ricevo questo messaggio di errore:

 Incorrect datetime value: '12/21/2012 1:13:58 PM' for column 'stock_dateUpdated' at row 1 

Quindi qual è il giusto formato / valore per dateTime da inserire in un database MySQL?

D: Qual è il giusto formato / valore per il letterale DATETIME all’interno di un’istruzione MySQL?

A: In MySQL, il formato standard per un letterale DATETIME è:

  'YYYY-MM-DD HH:MI:SS' 

con il componente orario come orologio a 24 ore (ovvero, le cifre delle ore fornite come valore compreso tra 00 e 23).

MySQL fornisce una funzione incorporata STR_TO_DATE che può convertire stringhe in vari formati in tipi di dati DATE o DATETIME .

Quindi, in alternativa, puoi anche specificare il valore di un DATETIME con una chiamata a tale funzione, in questo modo:

 STR_TO_DATE('12/21/2012 1:13:58 PM','%m/%d/%Y %h:%i:%s %p') 

Quindi, potresti fare in modo che MySQL esegua la conversione per te INSERT , se la tua lista VALUES fosse così:

 ... VALUES ('@stockID', STR_TO_DATE('@dateUpdated','%m/%d/%Y %h:%i:%s %p'); 

(Ho notato che manca una virgola obbligatoria tra i due valori letterali nell’elenco dei VALUES ).


MySQL consente una certa latitudine nei delimitatori tra le parti del letterale DATETIME , quindi non sono strettamente necessari.

MySQL 5.5 Manuale di riferimento.

Quello che ho usato funziona è anno-mese-giorno, con 24 ore di tempo. In PHP è la date('Ymd H:i:s') , che credo corrisponda a yyyy-MM-dd HH:mm:ss in C # /. NET. (La parte temporale è facoltativa, così come i trattini.)

Confermato in documenti, data e ora letterali :

I valori di data e ora possono essere rappresentati in diversi formati, ad esempio stringhe tra virgolette o come numeri, a seconda del tipo esatto del valore e di altri fattori. Ad esempio, in contesti in cui MySQL si aspetta una data, interpreta una qualsiasi di “2015-07-21”, “20150721” e 20150721 come data.

Come menzionato nel commento, manca il delimitatore , nei valori. Meglio usare STR_TO_DATE per convertire la stringa in object data prima di inserire come:

 String Query = "INSERT INTO `restaurantdb`.`stocksdb` "+ " (`stock_ID`,`stock_dateUpdated`) VALUES "+ "('@stockID', STR_TO_DATE(@dateUpdated, '%m/%d/%Y %h:%i:%s %p'))"; 

Il formato DATETIME di MySql è AAAA-MM-GG HH: MM: SS – Vedi questa pagina