Может ли MySQL преобразовать сохраненное время в формате UTC в местное время с привязкой к часовому поясу непосредственно в обычном операторе выбора?
Допустим, у вас есть данные с отметкой времени (UTC).
CREATE TABLE `SomeDateTable` (
`id` int(11) NOT NULL auto_increment,
`value` float NOT NULL default '0',
`date` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
)
Тогда, когда я
"select value, date from SomeDateTable";
Я, конечно, получаю все даты, как в их сохраненной форме UTC.
Но предположим, что я хотел бы иметь их в другом часовом поясе (с DST), могу ли я затем добавить немного волшебства в запрос выбора, чтобы я получил все даты обратно в выбранный часовой пояс?
"select value, TIMEZONE(date, "Europe/Berlin") from SomeDateTable";
Или я должен сделать это на каком-то другом слое сверху, например, в каком-то php-коде? (похоже, так большинство людей решило эту проблему).
Если ваша установка MySQL позволяет использовать CONVERT_TZ, это очень чистое решение, этот пример показывает, как его использовать.
SELECT CONVERT_TZ( '2010-01-01 12:00', 'UTC', 'Europe/Stockholm' )
Однако я не знаю, хороший ли это способ, поскольку в некоторых установках MySQL эта функция отсутствует, используйте с осторожностью.