Amazon RDS – есть ли временные решения для изменения часового пояса базы данных в SQL Server?

Недавно Amazon объявила о поддержке изменения часовых поясов в Oracle RDS .

Поскольку это все еще не поддерживается для Microsoft SQL Server 2012, существуют ли какие-либо способы обхода, чтобы получить функциональность, аналогичную изменению всего часового пояса базы данных?

Поскольку вы просите об обходных решениях …

Мы в основном полностью игнорируем часовой пояс сервера / базу данных и полностью работаем с UTC. GetUtcDate() например, для всех столбцов «DateCreated». Поскольку мы привержены этому подходу, мы просто не сталкиваемся с какими-либо проблемами.

Если вам нужно сохранить часовой пояс вместе с данными о дате, вы можете использовать DateTimeOffset.

Одно из предостережений заключается в том, что планы обслуживания будут выполняться во время сервера. Это не было проблемой, потому что мы нормализуем все по местному времени (это не UTC, а не время сервера) в любой из наших программ календаря.

Я сделал это с MySQL на RDS, изменив мою группу параметров DB экземпляра на пользовательский, который я могу редактировать параметры для.

Затем я создал следующую процедуру:

 DELIMITER | CREATE PROCEDURE mysql.init_connect_procedure () IF NOT(POSITION('[email protected]' IN user()) = 1) THEN SET SESSION time_zone = 'America/New_York'; END IF | DELIMITER ; 

Примечание: каждая другая инструкция в Интернете использует функцию current_user () вместо пользователя (), которая не работает для меня!

Уловка для этой конфигурации заключается в том, что тогда вы должны предоставить привилегии всем пользователям базы данных, чтобы иметь возможность выполнять эту функцию, или они даже не смогут подключиться к базе данных, поэтому для каждого пользователя и каждого будущего пользователя у вас есть для запуска этой команды. (и нет никакого подстановочного доступа к процедурам)

 GRANT EXECUTE ON PROCEDURE mysql.init_connect_procedure TO 'user'@'%' ; 

Я отредактировал параметр init_connect для установки как CALL mysql.init_connect_procedure . Я уверен, что SQL SERVER имеет эквивалентный параметр, если не тот же.

Перезагрузите сервер, и вы должны быть хорошими!

Предупреждение: пользователь rdsadmin является пользователем root, для которого только Amazon имеет пароль и использует его для поддержки и резервного копирования базы данных. Вы не хотите изменять часовой пояс для этого пользователя или повредить всю базу данных. Следовательно, код, чтобы убедиться, что это не этот пользователь. Я действительно рекомендую сделать так, чтобы пользователь был одинаковым для SQL SERVER, это решение предназначено только для MySQL и является ужасным решением, к сожалению, у меня не было другого выбора. Если вы не сможете сделать этот дескриптор часовой пояс на своем конце приложения.

  • Время локального отображения Azure SQL
  • TimeZoneCode to TimeZoneInfo
  • Как сохранить часовой пояс в SQL Server 2005
  • Получение локальной даты / времени для определенного часового пояса в SQL Server
  • Нужна функция SQL Server для преобразования локального дат-времени в UTC, который поддерживает DST
  • Определите текущий статус DST, когда я не наблюдаю DST в своем часовом поясе (SQL Server)
  • Давайте будем гением компьютера.