Это не имеет ничего общего с PHP.Вы просто используете неправильный формат литерала даты в MySQL.А для документов :
MySQL распознает значения DATETIME
и TIMESTAMP
в следующих форматах:
в виде строки вили 'YYYY-MM-DD HH:MM:SS'
или 'YY-MM-DD HH:MM:SS'
формат.Здесь также разрешен «смягченный» синтаксис: любой символ пунктуации может использоваться в качестве разделителя между частями даты или временем.
В виде строки без разделителей в 'YYYYMMDDHHMMSS'
или 'YYMMDDHHMMSS'
формат, при условии, что строка имеет смысл как дата.
как число в формате YYYYMMDDHHMMSS
или YYMMDDHHMMSS
, при условии, что число имеет смысл какdate.
1546335960
может быть последним случаем, но числа не имеют смысла в качестве даты, потому что год 1546 не имел 33 месяцев.
ToХуже того, многие MySQL-серверы по умолчанию настроены так, что допускаются ошибки такого типа:
mysql> CREATE TABLE test (
-> foo TIMESTAMP
-> );
Query OK, 0 rows affected (0.74 sec)
mysql> SET @@SESSION.sql_mode = '';
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO test (foo) VALUES (1546335960);
Query OK, 1 row affected, 1 warning (0.39 sec)
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------+
| Warning | 1265 | Data truncated for column 'foo' at row 1 |
+---------+------+------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT * FROM test;
+---------------------+
| foo |
+---------------------+
| 0000-00-00 00:00:00 |
+---------------------+
1 row in set (0.00 sec)
Как видите, вы получили простое предупреждение (которое необходимо прочитать явно) и повреждение данных,
Если вы сконфигурируете свое приложение для использования строгого режима, вы получите правильное сообщение об ошибке как раз вовремя:
mysql> SET @@SESSION.sql_mode = 'TRADITIONAL,NO_AUTO_VALUE_ON_ZERO';
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO test (foo) VALUES (1546335960);
ERROR 1292 (22007): Incorrect datetime value: '1546335960' for column 'foo' at row 1
mysql>
Обратите внимание, что timestamp это простородовое английское слово:
Цифровая запись времени возникновения определенного события.
Не обязательно является синонимом Unix time .