2015-09-15 4 views
0

У меня есть событие, которое запускается каждый час в моей базе данных. Он вызывает процедуру, которая удаляет строки из моей таблицы фотографий старше дня. Вот запрос:MySQL удаление строки Раньше, чем должно быть

DELETE FROM Photos WHERE created_at < (NOW() - INTERVAL 1 DAY); 

Однако сегодня утром я заметил, что ряд я был тестирования был удален более чем на 5 часов, прежде чем она должна быть. Я живу в Хьюстоне, поэтому я нахожусь в центральное время. Фотография должна была удалиться в центральной части 11:23, поэтому я предполагаю, что это проблема с часовым поясом. Если это так, можно добавить часовой пояс к дате, если это не проблема.

+0

1 день 1 день. '... <(NOW() - INTERVAL 1 DAY)' всегда будет означать * старше 1 дня *, в каждом часовом поясе. Таким образом, либо значение в 'created_at' происходит с другого сервера с другим часовым поясом, чем SQL-сервер, либо проблема должна быть чем-то другим. –

+0

Это не так, например, если created_at составляет 5:30 вечера, а событие выполняется в следующий час в 18:30 created_at на 23 часа старше (6:30 PM - 1 день), который будет ссылаться на 6:30 дня до. Математика правильная –

+0

Это не имеет никакого смысла. Если вы набираете что-то, допустим, 1PM и запустите cronjob через 1 час, при 2PM, затем 24- (2-1) = 23, * not * -23, так что это ** более новый **, чем (2PM - 1 день). Однако математика по-прежнему правильна. То, что я пытался сказать, заключается в том, что не имеет значения, если вы вычтите 24 часа в CEST, EEST, WEST или в любой другой часовой пояс - 24 часа - 24 часа в каждом часовом поясе. –

ответ

1

Это может быть проблема с часовым поясом, если вы дБ не находитесь в то же время, когда вы находитесь.

Обязательно, чтобы данные очищались каждый час, а не каждый день.

Вы можете получить больше радости от использования функциональности функции даты, получая только день. Таким образом, вы избавитесь от отметки времени полностью

Так

Delete from photos where created_at < ((date(now()) - INTERVAL 1 DAY); 
+0

Это правильный ответ. После некоторого расследования я обнаружил, что я конвертировал время в свое местное время, в то время как мой сервер mysql использовал часовой пояс GMT, поэтому я был на 5 часов позади. –

+0

Если это правильный ответ, проголосуйте за него :) –

Смежные вопросы