Abaixo está uma descrição do ORACLETIMESTAMP WITH LOCAL TIME ZONE
... os dados armazenados no banco de dados são normalizados para o fuso horário do banco de dados e o deslocamento do fuso horário não é armazenado como parte dos dados da coluna. Quando os usuários recuperam os dados, o Oracle os retorna no fuso horário da sessão local dos usuários .
O que os dados armazenados no banco de dados são normalizados para o fuso horário do banco de dados ? Normalizado... como?
Se for normalizado, por que não é retornado de acordo com o fuso horário do servidor em vez do fuso horário da sessão local dos usuários ... Como é "sessão" e não "servidor"?
Normalizado significa que as informações de fuso horário não são armazenadas. Ao armazenar esses dados, o valor do carimbo de data/hora é ajustado automaticamente para estar no mesmo fuso horário do servidor de banco de dados. Ao recuperar esses dados, o valor do carimbo de data/hora é ajustado automaticamente para estar no mesmo fuso horário do cliente.
Por exemplo, simulo que meu cliente está em um fuso horário diferente:
Crie uma tabela para armazenar valores de carimbo de data/hora:
Agora observe como meu horário local (cliente) é diferente (
current_timestamp
) do horário do servidor (systimestamp
):Agora eu insiro minha hora local:
Apenas o que eu esperava. Mas se eu examinar o conteúdo real:
TIMESTAMP
é armazenado como:As informações de fuso horário estariam no 12º e 13º byte, mas não são armazenadas com esse tipo de dados.
Portanto, os dados reais armazenados são
2016-12-29 15:36:32:...
, porque meu banco de dados está noCET
fuso horário.Se eu fingir estar em outro fuso horário diferente, minha consulta retornará um carimbo de data/hora ajustado para esse fuso horário:
Muitas vezes, quando você precisa trabalhar com dados de fuso horário, uma abordagem comum é:
Isso é exatamente o que
TIMESTAMP WITH LOCAL TIME ZONE
está fazendo, mas no nível SQL. A única diferença é:Uma vez que você criou uma tabela com uma
TIMESTAMP WITH LOCAL TIME ZONE
coluna e esta tabela contém quaisquer dados que você não podeDBTIMEZONE
mais alterar - o que parece lógico quando você considera as declarações acima.