Det ser ud til, at det korte svar på dette spørgsmål er "Nej, det er ikke sikkert" - denne konklusion følger en række eksperimenter med MySQL shell. Ville stadig sætte pris på et mere "teoretisk" svar...
Tilsyneladende er MySQL-motoren (som standard) ret liberal i, hvad den accepterer som en Datetime-literal, selv med sql_mode
indstillet til STRICT_ALL_TABLES:ikke kun forskellige separatorer accepteres, de kan også variere:
INSERT INTO t(dt) VALUES('2012-01,03.04:[email protected]'); -- Query OK, 1 row affected
Desuden, hvis strengen er for kort, vil den være polstret med nuller... men der kan være overraskelser:
INSERT INTO t(dt) VALUES('2012011'); -- 2020-12-01 01:00:00 is what's inserted
Det triste er, at strengen for lang (når det sidste parserbare ciffer efterfølges af noget andet end mellemrum) vil blive betragtet som en ugyldig værdi i streng tilstand:
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)
I den traditionelle tilstand er parsing endnu mere afslappet - men ikke mere præcis; desuden vil de strenge, der betragtes som forkerte i den strenge tilstand, give en slags 'tavse advarsler', selvom operationer vil lykkes:
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 |
+---------------------+
Den nederste linje er, at vi var nødt til at omskrive noget DAL-relateret kode, så datoer (og datotider) altid sendes til DB i "normaliseret" form. Jeg undrer mig over, hvorfor det er os, der skal gøre det, og ikke Zend_Db-udviklere. Men det er en anden historie, formoder jeg. )