Sepertinya jawaban singkat untuk pertanyaan ini adalah "Tidak, ini tidak aman" - kesimpulan ini mengikuti serangkaian percobaan dengan shell MySQL. Masih akan menghargai jawaban yang lebih "teoretis", meskipun...
Rupanya mesin MySQL (secara default) cukup liberal dalam apa yang diterimanya sebagai literal Datetime bahkan dengan sql_mode
set ke STRICT_ALL_TABLES :tidak hanya berbagai pemisah yang diterima, mereka mungkin juga berbeda:
INSERT INTO t(dt) VALUES('2012-01,03.04:[email protected]'); -- Query OK, 1 row affected
Selain itu, jika string terlalu pendek, itu akan diisi dengan nol... tapi mungkin ada kejutan:
INSERT INTO t(dt) VALUES('2012011'); -- 2020-12-01 01:00:00 is what's inserted
Yang menyedihkan adalah string yang terlalu panjang (ketika digit terakhir yang dapat diuraikan diikuti oleh sesuatu selain spasi) akan dianggap sebagai nilai yang tidak valid dalam mode ketat:
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)
Dalam penguraian mode tradisional bahkan lebih santai - tetapi tidak lebih tepat; selain itu, string yang dianggap salah dalam mode ketat akan memberikan semacam 'peringatan diam', meskipun operasi akan berhasil:
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 |
+---------------------+
Intinya adalah bahwa kami harus menulis ulang beberapa kode terkait DAL sehingga tanggal (dan waktu tanggal) selalu dikirim ke DB dalam bentuk "dinormalisasi". Saya bertanya-tanya mengapa kita yang harus melakukannya, dan bukan pengembang Zend_Db. Tapi itu cerita lain, kurasa. )