Изглежда, че краткият отговор на този въпрос е "Не, не е безопасно" - това заключение следва серия от експерименти с обвивката на MySQL. Все пак бих оценил по-"теоретичен" отговор...
Очевидно MySQL двигателят е (по подразбиране) доста либерален в това, което приема като Datetime литерал дори с sql_mode
зададено на STRICT_ALL_TABLES :не само се приемат различни разделители, но може и да се различават:
INSERT INTO t(dt) VALUES('2012-01,03.04:[email protected]'); -- Query OK, 1 row affected
Освен това, ако низът е твърде кратък, той ще бъде подплатен с нули... но може да има изненади:
INSERT INTO t(dt) VALUES('2012011'); -- 2020-12-01 01:00:00 is what's inserted
Тъжното е, че твърде дълъг низ (когато последната цифра за анализиране е последвана от нещо различно от интервал) ще се счита за невалидна стойност в строг режим:
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)
В традиционния режим разборът е още по-спокоен - но не и по-прецизен; освен това низовете, които се считат за неправилни в стриктния режим, ще дават нещо като „безшумни предупреждения“, въпреки че операциите ще успеят:
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 |
+---------------------+
Изводът е, че трябваше да пренапишем някакъв код, свързан с DAL, така че датите (и датите и времената) винаги да се изпращат в DB в "нормализирана" форма. Чудя се защо трябва да го направим ние, а не разработчиците на Zend_Db. Но това е друга история, предполагам. )