Sembra che la risposta breve a questa domanda sia "No, non è sicuro" - questa conclusione segue una serie di esperimenti con la shell MySQL. Apprezzerei comunque una risposta più "teorica", però...
Apparentemente il motore MySQL è (per impostazione predefinita) piuttosto liberale in ciò che accetta come valore letterale Datetime anche con sql_mode
impostato su STRICT_ALL_TABLES :non solo sono accettati diversi separatori, possono anche differire:
INSERT INTO t(dt) VALUES('2012-01,03.04:[email protected]'); -- Query OK, 1 row affected
Inoltre, se la stringa è troppo corta, verrà riempita di zeri... ma potrebbero esserci delle sorprese:
INSERT INTO t(dt) VALUES('2012011'); -- 2020-12-01 01:00:00 is what's inserted
La cosa triste è che la stringa troppo lunga (quando l'ultima cifra analizzabile è seguita da qualcosa di diverso dagli spazi bianchi) sarà considerata un valore non valido in modalità rigorosa:
mysql> INSERT INTO t(dt) VALUES('2012-06-27T05:25Z');
ERROR 1292 (22007): Incorrect datetime value: '2012-06-27T05:25Z' for column 'dt' at row 1
mysql> INSERT INTO t(dt) VALUES('2012-06-27T05:25');
Query OK, 1 row affected (0.10 sec)
Nella modalità tradizionale l'analisi è ancora più rilassata, ma non più precisa; inoltre, le stringhe che sono considerate errate nella modalità rigorosa daranno una sorta di 'avviso silenzioso', anche se le operazioni andranno a buon fine:
mysql> INSERT INTO t(dt) VALUES('2012-06-27T05:25Z');
Query OK, 1 row affected, 1 warning (0.10 sec)
mysql> SHOW WARNINGS;
+---------+------+---------------------------------------------+
| Warning | 1264 | Out of range value for column 'dt' at row 1 |
+---------+------+---------------------------------------------+
mysql> SELECT dt FROM t;
+---------------------+
| dt |
+---------------------+
| 2012-06-27 05:25:00 |
+---------------------+
La linea di fondo è che abbiamo dovuto riscrivere del codice relativo a DAL in modo che le date (e le datetime) vengano sempre inviate al DB in forma "normalizzata". Mi chiedo perché dobbiamo farlo noi e non gli sviluppatori Zend_Db. Ma questa è un'altra storia, suppongo. )