MySQL Server por sí mismo no tiene problemas de conformidad con el año 2000 (Y2K):
MySQL Server utiliza funciones de tiempo Unix que tratan las
fechas hasta el año 2037
para valores
TIMESTAMP
. Para valores
DATE
y DATETIME
, se
aceptan fechas hasta el año 9999
.
Todas las funciones de fecha MySQL se implementan en un
mismo fichero fuente, sql/time.cc
, y
están programados cuidadosamente para no tener problemas
con el año 2000.
En MySQL 5.0 y posterior, el tipo de columna
YEAR
puede almacenar los años
0
y 1901
hasta
2155
en un byte y mostrarlo usando de dos
a cuatro dígitos. Todos los años de dos dígitos se
consideran en el rango 1970
hasta
2069
, lo que significa que si almacena
01
en una columna de tipo
YEAR
, MySQL Server lo trata como
2001
.
La siguiente demostración ilustra que MySQL Server no tiene
problemas con valores DATE
o
DATETIME
hasta el año 9999, ni tampoco tiene
problemas con valores de tipo TIMESTAMP
hasta
el año 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.01 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), -> ('2040-01-01','2040-01-01 00:00:00',20400101000000), -> ('9999-12-31','9999-12-31 23:59:59',99991231235959); Query OK, 14 rows affected (0.01 sec) Records: 14 Duplicates: 0 Warnings: 2 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 | | 2040-01-01 | 2040-01-01 00:00:00 | 00000000000000 | | 9999-12-31 | 9999-12-31 23:59:59 | 00000000000000 | +------------+---------------------+----------------+ 14 rows in set (0.00 sec)
Los dos últimos valores de columna TIMESTAMP
son cero porque los valores de año (2040
,
9999
) excede el máximo de
TIMESTAMP
. El tipo de datos
TIMESTAMP
que se usa para almacenar el tiempo
actual, soporta valores del rango
19700101000000
hasta
20300101000000
en máquinas de 32-bit
(valores con signo). En máquinas de 64-bit,
TIMESTAMP
trata valores hasta
2106
(valores sin signo).
Aunque MySQL Server por sí mismo no tiene problemas con el año
2000, puede tenerlos si interactúa con aplicaciones que sí los
tengan. Por ejemplo, muchas aplicaciones antiguas almacenan o
manipulan años usando valores de dos dígitos (que son
ambíguos) en lugar de cuatro dígitos. Este problema puede
darse por aplicaciones que usan valores tales como
00
o 99
como indicadores
de valores "perdidos". Por desgracia, estos problemas pueden ser
complicados de arreglar, ya que aplicaciones diferentes pueden
haber sido programadas por distintos programadores, cada uno de
los cuales puede usar una serie de distintas convenciones y
funciones de fechas.
Así, aunque MySQL Server no tiene problemas con el año 2000, es la responsabilidad de la aplicación de proporcionar entradas inambíguas. Consulte Sección 11.3.4, “Efecto 2000 (Y2K) y tipos de datos” para las reglas de MySQL Server para tratar fechas ambíguas de dos digitos.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.