Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como definir o fuso horário do banco de dados para uma instância do AWS RDS


Antes do restante da minha resposta, gostaria apenas de recomendar agora que, se você tiver alguma opção de alterar seu aplicativo para usar o UTC, isso economizará muito sofrimento agora e no futuro.

No entanto, dado o contexto da sua pergunta, estou assumindo que isso não é uma opção e que você está adaptando um sistema projetado para usar o MySQL em um ambiente de servidor tradicional, onde você pode apenas alterar o fuso horário e que há lógica de código que espera esse fuso horário e não pode ser facilmente adaptado para usar o UTC.

Mas se você realmente precisa armazenar como PST, continue lendo.

Você está certo de que o mySql usará o fuso horário do servidor para armazenamento de carimbo de data/hora por padrão, no entanto, sua suposição de que as instâncias do RDS têm seus fusos horários definidos com base na região da AWS em que são executadas está incorreta - todas as instâncias do RDS são iniciadas com seu fuso horário definido como UTC, e essa configuração pode não ser alterado:

Portanto, sua única opção é definir o fuso horário em cada conexão que seu aplicativo faz com a instância do banco de dados para PST. Você pode usar o SET SESSION time_zone = 'PST' query para executar em cada conexão que um aplicativo faz seguindo as duas etapas encontradas aqui :

  1. Crie o seguinte procedimento armazenado (UTC-8 é PST):

  2. Conecte-se à sua instância e execute o seguinte comando:

  3. Você pode precisar conceder EXECUTE permissões para os usuários que se conectarão ao banco de dados, caso contrário, você poderá receber um erro de conexão:

Agora, todas as consultas executadas em sua instância do RDS por qualquer cliente devem usar o PST sem modificar nenhuma lógica do aplicativo e sem precisar atualizar nenhum registro de data e hora armazenado anteriormente no banco de dados.