Der MySQL Server selbst hat keine Probleme mit der Jahr-2000-Konformität:
MySQL benutzt Unix-Zeitfunktionen und hat keine Probleme mit
Datumsangaben bis 2069
. Alle zweistelligen
Jahresangaben werden als Angaben zwischen
1970
und 2069
,
betrachtet, was bedeutet, dass, wenn Sie 01
in einer Spalte speichern, MySQL dies als
2001
behandelt.
Alle MySQL-Datumsfunktionen sind in einer Datei
sql/time.cc
gespeichert und sehr
sorgfältig kodiert, um Jahr-2000-sicher zu sein.
AB MySQL Version 3.22 kann der Spaltentyp
YEAR
das Jahr 0
und den
Bereich von 1901
bis
2155
in einem Byte speichern und sie mit 2
oder 4 Ziffern anzeigen.
Das folgende einfache Beispiel demonstriert, dass MySQL Server
keine Probleme mit DATE
- oder
DATETIME
-Werten bis zum Jahr 9999 und keine
Probleme mit TIMESTAMP
-Werten bis ins Jahr 2030
hat:
mysql>DROP TABLE IF EXISTS y2k;
Query OK, 0 rows affected (0.00 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','1998-12-31 23:59:59'),
->('1999-01-01','1999-01-01 00:00:00','1999-01-01 00:00:00'),
->('1999-09-09','1999-09-09 23:59:59','1999-09-09 23:59:59'),
->('2000-01-01','2000-01-01 00:00:00','2000-01-01 00:00:00'),
->('2000-02-28','2000-02-28 00:00:00','2000-02-28 00:00:00'),
->('2000-02-29','2000-02-29 00:00:00','2000-02-29 00:00:00'),
->('2000-03-01','2000-03-01 00:00:00','2000-03-01 00:00:00'),
->('2000-12-31','2000-12-31 23:59:59','2000-12-31 23:59:59'),
->('2001-01-01','2001-01-01 00:00:00','2001-01-01 00:00:00'),
->('2004-12-31','2004-12-31 23:59:59','2004-12-31 23:59:59'),
->('2005-01-01','2005-01-01 00:00:00','2005-01-01 00:00:00'),
->('2030-01-01','2030-01-01 00:00:00','2030-01-01 00:00:00'),
->('2040-01-01','2040-01-01 00:00:00','2040-01-01 00:00:00'),
->('9999-12-31','9999-12-31 23:59:59','9999-12-31 23:59:59');
Query OK, 14 rows affected, 2 warnings (0.00 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 | 1998-12-31 23:59:59 | | 1999-01-01 | 1999-01-01 00:00:00 | 1999-01-01 00:00:00 | | 1999-09-09 | 1999-09-09 23:59:59 | 1999-09-09 23:59:59 | | 2000-01-01 | 2000-01-01 00:00:00 | 2000-01-01 00:00:00 | | 2000-02-28 | 2000-02-28 00:00:00 | 2000-02-28 00:00:00 | | 2000-02-29 | 2000-02-29 00:00:00 | 2000-02-29 00:00:00 | | 2000-03-01 | 2000-03-01 00:00:00 | 2000-03-01 00:00:00 | | 2000-12-31 | 2000-12-31 23:59:59 | 2000-12-31 23:59:59 | | 2001-01-01 | 2001-01-01 00:00:00 | 2001-01-01 00:00:00 | | 2004-12-31 | 2004-12-31 23:59:59 | 2004-12-31 23:59:59 | | 2005-01-01 | 2005-01-01 00:00:00 | 2005-01-01 00:00:00 | | 2030-01-01 | 2030-01-01 00:00:00 | 2030-01-01 00:00:00 | | 2040-01-01 | 2040-01-01 00:00:00 | 0000-00-00 00:00:00 | | 9999-12-31 | 9999-12-31 23:59:59 | 0000-00-00 00:00:00 | +------------+---------------------+---------------------+ 14 rows in set (0.00 sec)
Die letzten beiden TIMESTAMP
-Spaltenwerte sind
null, weil die Jahreswerte (2040
,
9999
) das Maximum für
TIMESTAMP
überschreiten. Der Datentyp
TIMESTAMP
, der zur Speicherung der aktuellen
Zeit verwendet wird, unterstützt Werte im Bereich zwischen
'1970-01-01 00:00:00'
und '2030-01-01
00:00:00'
(auf 32-Bit-Maschinen; vorzeichenbehafteter
Wert). Auf 64-Bit-Maschinen kann TIMESTAMP
Werte bis zum Jahr 2106
(vorzeichenloser Wert)
handhaben.
Obgleich MySQL Server selbst Jahr-2000-sicher ist, kann es
Probleme mit Applikationen geben, die nicht Jahr-2000-konform
sind. Beispielsweise speichern oder behandeln viele alte
Applikationen Jahreswerte als zweistellige Zahlen (was uneindeutig
ist). Dieses Problem wird durch Applikationen verschlimmert, die
Werte wie 00
oder 99
als
„fehlende“ Wertangaben betrachten. Solcherlei
Probleme können schwer zu beheben sein.
Obwohl also MySQL Server keine Jahr-2000-Probleme aufweist, ist es die Aufgabe der Applikation, eindeutige Werte einzugeben. Siehe Abschnitt 11.3.4, „Jahr-2000-Probleme und Datumstypen“, hier sind die Regeln aufgeführt, die MySQL Server zur Handhabung uneindeutiger Datumseingaben mit zweistelligen Jahreswerten verwendet.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.