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

PHP - utilizzando STR_TO_DATE aggiorna la colonna datetime ma è aggiornato record vuoto come 0000-00-00 00:00:00

Il problema riguarda il formato %h:%i:%s

Ecco cosa succede in MySQL

mysql> select str_to_date('10-09-1985 00:00:00','%d-%m-%Y %h:%i:%s');
+--------------------------------------------------------+
| str_to_date('10-09-1985 00:00:00','%d-%m-%Y %h:%i:%s') |
+--------------------------------------------------------+
| NULL                                                   |
+--------------------------------------------------------+

Quindi restituisce NULL e all'inserimento non va, quindi devi usare il formato %H:%i:%s

mysql> select str_to_date('10-09-1985 00:00:00','%d-%m-%Y %H:%i:%s');
+--------------------------------------------------------+
| str_to_date('10-09-1985 00:00:00','%d-%m-%Y %H:%i:%s') |
+--------------------------------------------------------+
| 1985-09-10 00:00:00                                    |
+--------------------------------------------------------+

Per 10-09-1985 01:00:00 il formato della data è valido con %h:%i:%s quindi funziona.

È meglio scegliere il formato della data Y-m-d H:i:s anche con le date inserite, dal 10-09-1985 01:00:00 non dice se la sua AM o PM e in seguito i calcoli della data diventano molto difficili.