Я получил два поля: time_scan_start
и time_scan_end
(поле метки времени).
Когда я открываю свое соединение с MySQL с PDO, я использую SET NAMES utf8,time_zone = "+0:00";
,
Теперь, когда я делаю запрос в MySQL, мне нужно использовать время UTC WHERE time_scan_start >= UTC
или мне нужно использовать локальную зону PHP? Будет ли MySQL делать это самостоятельно?
Я провел некоторое тестирование с gmdate и датой, когда-то это сработало, другие – нет.
благодаря
Если вы сравниваете поля TIMESTAMP
, вам нужно использовать значения сравнения в часовом поясе сервера. Вы можете определить часовой пояс сервера через:
SELECT @@time_zone;
Поэтому, если вы выполнили
SET NAMES time_zone = "+0:00";
то вы будете использовать значения, основанные на UTC.
Это связано с тем, что поля TIMESTAMP
хранятся в MySQL в формате UTC и преобразуются в часовой пояс сервера перед отображением (или сравнением).
Примечание. Если вы сравниваете поля DATETIME
или поля TIME
, вам нужно будет использовать значение сравнения в том же часовом поясе, которое использовалось, когда значение было вставлено в поле.
Это связано с тем, что поля DATETIME
и TIME
хранятся в MySQL без какой-либо информации о часовом поясе и не преобразуются перед отображением (или сравнением).
MySQL DATETIME
ничего не знает о часовом поясе. Поэтому вам нужно решить, какой часовой пояс будет вашим «стандартным» (обычно UTC) и хранить все ваши временные метки, используя этот часовой пояс, используя CONVERT_TZ
если это необходимо.
Затем выполните то же самое для поиска, то есть преобразуйте значения в UTC, прежде чем использовать их в поиске.