База данных mysql (5.7.25-0ubuntu0.18.04.2 (Ubuntu)) сообщает, что вместо '2019-04-10 13:54:21 я вставляю' 1969-12-31 16:00:00 ' 'в таблицу в базе данных.
Однако, поскольку есть доказательства того, что запрос, который попал на сервер apache2.4, а затем был обработан работниками php7-fpm, включил эту дату «10/10/2019 13:54:21».
Меня удивляет, почему он не вошел в базу данных, например, «2019-04-10 13:54:21». После того, как этот код побежал:
date('Y-m-d H:i:s', strtotime('4/10/2019 13:54:21'));
Эта запись поступает в таблицу с помощью хранимой процедуры, однако я проверил, что параметры введены правильно, так как другая дата прошла в порядке.
new_record | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | CREATE DEFINER=`user`@`localhost` PROCEDURE `new_record`(
IN p_account_id integer,
IN p_order_id integer,
IN p_unit_id integer,
IN p_begin_date datetime,
IN p_end_date datetime,
IN p_duration integer,
IN p_status integer
)
BEGIN
INSERT INTO schedule
(
schedule_id,
orders_id,
units_id,
schedule_begintime,
schedule_endtime,
duration,
status_id
)
SELECT 0, p_order_id, p_unit_id, p_begin_date, p_end_date, p_duration, p_status
FROM units AS u
JOIN properties AS p ON(p.properties_id = u.properties_id)
WHERE u.units_id = p_unit_id AND p.owners_id = p_account_id;
SELECT LAST_INSERT_ID() as post_id;
COMMIT;
END | utf8 | utf8_general_ci | utf8_general_ci
Создать таблицу для рассматриваемой таблицы выглядит следующим образом:
| schedule | CREATE TABLE `schedule` (
`schedule_id` int(11) NOT NULL AUTO_INCREMENT,
`orders_id` int(11) NOT NULL DEFAULT '0',
`units_id` int(11) NOT NULL DEFAULT '0',
`status_id` int(11) NOT NULL DEFAULT '1',
`schedule_begintime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`schedule_endtime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`duration` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`schedule_id`),
KEY `orders_id` (`orders_id`),
KEY `units_id` (`units_id`),
KEY `status_id` (`status_id`),
KEY `schedule_begintime` (`schedule_begintime`),
KEY `schedule_endtime` (`schedule_endtime`)
) ENGINE=InnoDB AUTO_INCREMENT=58 DEFAULT CHARSET=utf8
Любопытство заставляет меня писать здесь, так как я не могу думать о:
Почему дата не будет принята как действительная в strtotime?
Mysql вставляет дату по умолчанию там?
Существует модификация массива, в которой находится это значение даты, но нет модификации этого конкретного ключа?
Другая странность заключается в том, что это происходит только для одного из пользователей.
Кто-нибудь испытывал подобные проблемы? Могут ли они произойти из-за нагрузки на сервер?