Os Tipos DATETIME, DATE e TIMESTAMP


Os tipos DATETIME, DATE, e TIMESTAMP são relacionados. Esta seção descreve suas características, como eles se assemelham ou como se diferem.

O tipo DATETIME é usado quando você precisa de valores que contém informações sobre data e a a hora. MariaDB recupera e mostra valores DATETIME no formato 'YYYY-MM-DD HH:MM:SS'. A faixa suportada é de '1000-01-01 00:00:00' até '9999-12-31 23:59:59'. (Suportada significa que embora valores anteriores possam funcionar, não há nenhura garantia de disto.)

O tipo DATA é usado quando se necessita apenas do valor da data, sem a parte da hora. MariaDB recupera e mostra valores do tipo DATA no formato 'YYYY-MM-DD'. A faixa suportada é de '1000-01-01' até '9999-12-31'.

A coluna do tipo TIMESTAMP possui comportamento e propriedade variado, dependendo da versão do MariaDB e do modo SQL que o servidor está executando.

Comportamento do TIMESTAMP ao executar no modo MAXDB

Quando o MariaDB está executando no modo SQPDB, o TIMESTAMP comporta como DATETIME. Nenhuma atualização automática da coluna TIMESTAMP ocorre, como descrito no parágrafo seguinte. O MariaDB pode ser executado no modo MAXDB a partir da versão 4.1.1. Leia "Opções de Linha de Comando do mysqld".

Comportamento do TIMESTAMP quando não está executando no modo MAXDB

O tipo de campo TIMESTAMP fornece um tipo que pode ser usado para, automaticamente, marcar operações INSERT or UPDATE com a data e hora atual. Se você tiver multiplas colunas TIMESTAMP, só a primeira é atualizada automaticamente.

Atualizações automaticas da primeira coluna TIMESTAMP ocorrem sob qualquer uma das seguintes condições:

Outras colunas TIMESTAMP, além da primeira podem ser definidas com a data e hora atuais. Basta defini-las com NULL ou NOW()

Você pode definir colunas TIMESTAMP com um valor diferente da data e hora atuais colocando explicitamente o valor desejado. Isto é verdade mesmo para a primeira coluna TIMESTAMP. Você pode usar esta propriedade se, por exemplo, você quiser que um TIMESTAMP tenha seu valor definido como a data e hora atuais na criação de registros, mas não quer alterá-los quando o registro for atualizado mais tarde:

Por outro lado, você pode achar que é mais fácil usar uma coluan DATETIME que você inicializa com NOW() quando o registro for criado e deixa como está em atualizações subsequentes.

Propriedades TIMESTAMP quando executando no modo MAXDB

Quando o MariaDB está executando no modo MAXDB, TIMESTAMP é idêntico ao DATETIME. Ele usa o mesmo formato para armazenar e mostrar valores, e ele tem a mesma faixa. O MariaDB pode ser executado no modo MAXDB a partir da versão 4.1.1. Leia "Opções de Linha de Comando do mysqld".

Propriedades TIMESTAMP a partir do MariaDB quando não executado no modo MAXDB

No MariaDB 4.1.0, colunas TIMESTAMP são armazenadas e mostradas no mesmo formato que colunas DATETIME. Isto também significa que ele não podem ser estreitados ou alargados nos modos descritos no parágrafo seguinte. Em outras palavras, você não pode usar TIMESTAMP(2), TIMESTAMP(4), etc. Em outros casos, as propriedades são as mesmas de versões MariaDB anteriores.

Propriedades TIMESTAMP antes do MariaDB 4.1

Valores TIMESTAMP podem ter valores do incio de 1970 até algum momento do ano 2037, com a resolução de um segundo. Valores são mostrados como números

O formato no qual o MariaDB recupera e mostra valores TIMESTAMP depende do tamanho do display, como ilustrado pela tabela que se segue: O formato `cheio' TIMESTAMP é de 14 digitos, mas colunas TIMESTAMP podem ser criadas com tamanho de display menores:

Tipo da Coluna Formato do Display
TIMESTAMP(14) YYYYMMDDHHMMSS
TIMESTAMP(12) YYMMDDHHMMSS
TIMESTAMP(10) YYMMDDHHMM
TIMESTAMP(8) YYYYMMDD
TIMESTAMP(6) YYMMDD
TIMESTAMP(4) YYMM
TIMESTAMP(2) YY

Todas as colunas TIMESTAMP tem o mesmo tamanho de armazenamento, independente do tamanho de display. Os tamanhos de display mais comuns são 6, 8, 12, e 14. Você pode especificar um tamanho de display arbitrario na hora da criação da tabela, mas valores de 0 ou maiores que 14 são mudados para 14. Valores ímpares de tamanho na faixa de 1 a 13 são mudados para o maior número par mais próximo.

Nota: Na versão 4.1, TIMESTAMP é retornado com uma string com o formato 'YYYY-MM-DD HH:MM:SS', e timestamp de diferentes tamamnhos não são mais suportados.

Você pode especificar calores DATETIME, DATE e TIMESTAMP usando qualquer conjunto de formatos comum:

Valores DATETIME, DATE, ou TIMESTAMP ilegais são convertidos para o valor zero do tipo apropriado ('0000-00-00 00:00:00', '0000-00-00', ou 00000000000000).

Para valores especificados com strings que incluem delimitadores de data, não é necessário especificar dois digitos para valores de mês ou dia qua são menores que 10. '1979-6-9' é o mesmo que '1979-06-09'. Similarmente, para valores especificados como strings que incluem delimitadores de hora, não é necessário especificar dois digitos para valores de hora, minutos ou segundo que são menores que 10. '1979-10-30 1:2:3' Ré o mesmo que '1979-10-30 01:02:03'.

Valores especificados como números devem ter 6, 8, 12, ou 14 digitos. Se o número é de 8 ou 14 digitos, ele assume estar no formato YYYYMMDD ou YYYYMMDDHHMMSS e que o ano é dado pelos 4 primeiros dígitos. Se o é de 6 ou 12 dígitos, ele assume estar no formato YYMMDD or YYMMDDHHMMSS e que o ano é dado pelos 2 primeiros digitos. Números que não possua estes tamanho são interpretados como calores preenchidos com zero até o tamanho mais próximo.

Valores especificados como strings não delimitadas são interpretados usando o seu tamanho como dado. Se a string possui 8 ou 14 caracteres, o ano é assumido como os 4 primeiros caracteres. De outra forma o assume-se que o ano são os 2 primeiros caracteres. A string é interpretadada esquerda para direita para encontrar os valores do ano, mês, dia, hora, minute e segundo, para as partes da string. Isto significa que você não deve utilizar strings com menos de 6 caracteres. Por exemplo, se você especificar '9903', pensando em representar Março de 1999, você perceberá que o MariaDB insere uma data zero em sua tabela. Isto ocorre porque os valores do ano e mês são 99 e 03, mas a parte contendo o dia não existe (zero), então o valor não é uma data legal. No entanto, a partir do MariaDB 3.23, você pode especificar explicitamente um valor de zero para representar dia ou mês faltantes. Por exemplo, você pode usar '990300' para inserir o valor '1999-03-00'.

Colunas TIMESTAMP armazena valores legais utilizando precisão total com a qual os valores foram especificados, independente do tamanho do display. Isto tem diversas implicações:

Você pode, algumas vezes, atribuir valores de um tipo de data para um objeto de um diferente tipo de data. No entanto pode haver algumas alterações de valores ou perda de informação

Esteja ciente de certas dificuldades quando especificar valores de data: