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

Definir fuso horário do banco de dados MySQL para GMT


Não, não é possível alterar o fuso horário de um único banco de dados em uma instância MySQL.

Podemos recuperar o servidor e o cliente time_zone configurações com uma consulta, assim:
SELECT @@global.time_zone, @@session.time_zone;

Também podemos alterar o fuso horário do cliente para uma sessão ou alterar o fuso horário para toda a instância do MySQL.

Mas precisamos estar bem cientes da implicação que essa mudança terá nas conexões de clientes existentes e como DATETIME e TIMESTAMP valores já armazenados na instância serão interpretados.

Para definir o fuso horário do servidor na inicialização da instância do MySQL, podemos modificar o /etc/my.cnf (ou onde quer que os parâmetros de inicialização da instância mysql sejam lidos), sob o [mysqld] seção:
[mysqld]
default-time-zone='+00:00' 

-- ou --

Também é possível (menos desejável) adicionar o --default_time_zone='+00:00' opção para mysqld_safe

OBSERVAÇÃO: Alterar a configuração de fuso horário no servidor MySQL NÃO altera os valores armazenados nas colunas DATETIME ou TIMESTAMP existentes, MAS, uma vez que altera efetivamente o contexto no qual esses valores armazenados são interpretados, parecerá que todos os valores SÃO deslocados. (Onde 08:00 foi considerado 8:00 CST, com o fuso horário do servidor alterado de CST para GMT, esse mesmo '08:00' agora será considerado 8:00 GMT, o que seria efetivamente 2:00 CST.

Lembre-se também de que as colunas TIMESTAMP são sempre armazenadas em UTC, enquanto as colunas DATETIME não têm fuso horário.http://dev.mysql.com/doc/refman/5.5/en/datetime.html

Cada sessão do cliente pode alterar a configuração de fuso horário para sua própria sessão:
SET time_zone='-06:00';

Mas nada disso realmente "resolve" o problema de conversão de fuso horário, apenas move o problema de conversão.

Não há nada inerentemente "ruim" na camada de aplicação que trata das conversões de fuso horário; às vezes, esse é o melhor lugar para lidar. Só precisa ser feito de forma correta e consistente.

(O que é estranho na configuração que você descreve é ​​que o aplicativo está armazenando valores DATETIME como se o time_zone do servidor MySQL estivesse definido como GMT, mas o time_zone do servidor MySQL estivesse definido para outra coisa.)