O Servidor MySQL
não apresenta nenhum
problema com o ano 2000 (Y2K compatível)
O Servidor MySQL
usa funções de tempo
Unix que tratam datas até o ano 2037
para valores TIMESTAMP
; para valores
DATE
e DATETIME
, datas
até o ano 9999 são aceitas.
Todas as funções de data do MySQL
estão no arquivo sql/time.cc
e
codificadas com muito cuidado para ser compatível com o ano
2000.
No MySQL
versão 3.22 e posterior, o novo
tipo de campo YEAR
pode armazenar anos
0
e 1901
até
2155
em 1 byte e mostrá-lo usando 2 ou 4
dígitos. Todos os anos de 2 dígitos são considerados
estar na faixa de 1970
até
2069
; o que significa que se você
armazenar 01
em uma coluna
YEAR
, O Servidor MySQL
o tratará como 2001
.
O seguinte demonstração simples ilustra que o MySQL
Server
não tem nenhum problema com datas até depois
do ano 2030:
mysql>DROP TABLE IF EXISTS y2k;
Query OK, 0 rows affected (0.01 sec) mysql>CREATE TABLE y2k (date DATE,
->date_time DATETIME,
->time_stamp TIMESTAMP);
Query OK, 0 rows affected (0.00 sec) mysql>INSERT INTO y2k VALUES
->("1998-12-31","1998-12-31 23:59:59",19981231235959),
->("1999-01-01","1999-01-01 00:00:00",19990101000000),
->("1999-09-09","1999-09-09 23:59:59",19990909235959),
->("2000-01-01","2000-01-01 00:00:00",20000101000000),
->("2000-02-28","2000-02-28 00:00:00",20000228000000),
->("2000-02-29","2000-02-29 00:00:00",20000229000000),
->("2000-03-01","2000-03-01 00:00:00",20000301000000),
->("2000-12-31","2000-12-31 23:59:59",20001231235959),
->("2001-01-01","2001-01-01 00:00:00",20010101000000),
->("2004-12-31","2004-12-31 23:59:59",20041231235959),
->("2005-01-01","2005-01-01 00:00:00",20050101000000),
->("2030-01-01","2030-01-01 00:00:00",20300101000000),
->("2050-01-01","2050-01-01 00:00:00",20500101000000);
Query OK, 13 rows affected (0.01 sec) Records: 13 Duplicates: 0 Warnings: 0 mysql>SELECT * FROM y2k;
+------------+---------------------+----------------+ | date | date_time | time_stamp | +------------+---------------------+----------------+ | 1998-12-31 | 1998-12-31 23:59:59 | 19981231235959 | | 1999-01-01 | 1999-01-01 00:00:00 | 19990101000000 | | 1999-09-09 | 1999-09-09 23:59:59 | 19990909235959 | | 2000-01-01 | 2000-01-01 00:00:00 | 20000101000000 | | 2000-02-28 | 2000-02-28 00:00:00 | 20000228000000 | | 2000-02-29 | 2000-02-29 00:00:00 | 20000229000000 | | 2000-03-01 | 2000-03-01 00:00:00 | 20000301000000 | | 2000-12-31 | 2000-12-31 23:59:59 | 20001231235959 | | 2001-01-01 | 2001-01-01 00:00:00 | 20010101000000 | | 2004-12-31 | 2004-12-31 23:59:59 | 20041231235959 | | 2005-01-01 | 2005-01-01 00:00:00 | 20050101000000 | | 2030-01-01 | 2030-01-01 00:00:00 | 20300101000000 | | 2050-01-01 | 2050-01-01 00:00:00 | 00000000000000 | +------------+---------------------+----------------+ 13 rows in set (0.00 sec)
O valor da coluna TIMESTAMP
final é zero
porque o ano final (2050
) excede o
TIMESTAMP
maximo. O tipo de dados
TIMESTAMP
, que é usado para armazenar a hora
atual, suporta valores na faixa de
19700101000000
a
20300101000000
em máquinas 32 bits (valor
com sinal). Em máquinas de 64 bits,
TIMESTAMP
trata valores até
2106
(valores sem sinal).
O exemplo mostra que os tipos DATE
e
DATETIME
não tem problemas com as datas
usadas. Eles irão conseguir trabalhar com datas até o ano
9999
.
Embora o MySQL Server
seja seguro em
relação ao ano 2000, você pode ter problemas se você usá-lo
com aplicações que não são seguras com o ano 2000. Por
exemplo, muitas aplicações antigas armazenam ou manipulam anos
usando valores de 2 digitos (que são ambíguos) em vez de 4
dígitos. Este problema pode ser aumentado por aplicações que
usam valores como 00
ou 99
como indicadores de valores ``perdidos''. Infelizmente, estes
problemas pode ser difíceis de corrigir, cada um deles pode
usar um conjunto diferente de convenções e funções de
tratamento de datas.
Assim, apesar do Servidor MySQL
não ter
problemas com o ano 2000, é de responsabilidade de sua
aplicação fornecer datas que não sejam ambíguas. Veja
Secção 6.2.2.1, “Assuntos referentes ao ano 2000 (Y2K) e Tipos de Data” para as regras do Servidor
MySQL
para lidar com entrada de datas ambíguas que
contenham valores de ano com 2 dígitos.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.