У меня есть событие, которое запускается каждый час в моей базе данных. Он вызывает процедуру, которая удаляет строки из моей таблицы фотографий старше дня. Вот запрос:MySQL удаление строки Раньше, чем должно быть
DELETE FROM Photos WHERE created_at < (NOW() - INTERVAL 1 DAY);
Однако сегодня утром я заметил, что ряд я был тестирования был удален более чем на 5 часов, прежде чем она должна быть. Я живу в Хьюстоне, поэтому я нахожусь в центральное время. Фотография должна была удалиться в центральной части 11:23, поэтому я предполагаю, что это проблема с часовым поясом. Если это так, можно добавить часовой пояс к дате, если это не проблема.
1 день 1 день. '... <(NOW() - INTERVAL 1 DAY)' всегда будет означать * старше 1 дня *, в каждом часовом поясе. Таким образом, либо значение в 'created_at' происходит с другого сервера с другим часовым поясом, чем SQL-сервер, либо проблема должна быть чем-то другим. –
Это не так, например, если created_at составляет 5:30 вечера, а событие выполняется в следующий час в 18:30 created_at на 23 часа старше (6:30 PM - 1 день), который будет ссылаться на 6:30 дня до. Математика правильная –
Это не имеет никакого смысла. Если вы набираете что-то, допустим, 1PM и запустите cronjob через 1 час, при 2PM, затем 24- (2-1) = 23, * not * -23, так что это ** более новый **, чем (2PM - 1 день). Однако математика по-прежнему правильна. То, что я пытался сказать, заключается в том, что не имеет значения, если вы вычтите 24 часа в CEST, EEST, WEST или в любой другой часовой пояс - 24 часа - 24 часа в каждом часовом поясе. –