Я получил два поля: 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, прежде чем использовать их в поиске.