Weiter Zurück [Inhalt] Online Suche im Handbuch

16. Das Jahr 2000 Problem

MySQL ist Jahr 2000 fest ! MySQL verwendet das UNIX-Format bei der Verarbeitung der Zeit- und Datumsfunktionen. Es gibt stets die Zahl der Sekunden seit dem 1.1.1970 an. Das Jahr 2000 Problem ist bei keinem UNIX Derivat ein Problem. Interpretationsbedürftig ist eventuell nur die Ausgabe der RTC (Real Time Clock) des BIOS bei INTEL Hardware. So findet inzwischen bei fast allen UNIX Derivaten eine Korrektur bei alten BIOSen statt. Wenn die Jahresangabe kleiner als 70 ist, das ist bei zweistelligen Jahresangaben ab dem 1.1.2000 so, dann werden 2000 hinzuaddiert, wenn die Jahresangabe größer oder gleich 70 ist, dann wird nur 1900 hinzuaddiert.

UNIX-Programme besitzen nur dann ein Jahr 2000 Problem, wenn keine vierstelligen Datumsangaben in dem Anwendungsprogramm selber möglich sind.

MySQL kann eventuelle Probleme mit Anwendungsprogrammen aber noch auf andere Weise eventuell lösen. Hierzu hat MySQL Datenformat eingeführt, welches das Jahr stets nur zweistellig anzeigt, jedoch intern als vierstelliges Format abspeichert und mit diesem Format auch rechnet. Falls also die Anwendungssoftware nur 2 - stellig arbeitet, wird MySQL trotzdem korrekt rechnen und die korrekten Resultate an die Anwendungssoftware übergeben.

Folgende Ausgabe zeigt, daß MySQL bis zum Jahr 2030 keine Probleme hat:

mysql> DROP TABLE IF EXISTS y2k;
mysql> CREATE TABLE y2k (date date, date_time datetime, time_stamp
timestamp);
mysql> INSERT INTO y2k VALUES ("1998-12-31","1998-12-31
23:59:59",19981231235959);
mysql> INSERT INTO y2k VALUES ("1999-01-01","1999-01-01
00:00:00",19990101000000);
mysql> INSERT INTO y2k VALUES ("1999-09-09","1999-09-09
23:59:59",19990909235959);
mysql> INSERT INTO y2k VALUES ("2000-01-01","2000-01-01
00:00:00",20000101000000);
mysql> INSERT INTO y2k VALUES ("2000-02-28","2000-02-28
00:00:00",20000228000000);
mysql> INSERT INTO y2k VALUES ("2000-02-29","2000-02-29
00:00:00",20000229000000);
mysql> INSERT INTO y2k VALUES ("2000-03-01","2000-03-01
00:00:00",20000301000000);
mysql> INSERT INTO y2k VALUES ("2000-12-31","2000-12-31
23:59:59",20001231235959);
mysql> INSERT INTO y2k VALUES ("2001-01-01","2001-01-01
00:00:00",20010101000000);
mysql> INSERT INTO y2k VALUES ("2004-12-31","2004-12-31
23:59:59",20041231235959);
mysql> INSERT INTO y2k VALUES ("2005-01-01","2005-01-01
00:00:00",20050101000000);
mysql> INSERT INTO y2k VALUES ("2030-01-01","2030-01-01
00:00:00",20300101000000);
mysql> INSERT INTO y2k VALUES ("2050-01-01","2050-01-01
00:00:00",20500101000000);
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)
mysql> DROP TABLE y2k;
Das bedeutet, daß MySQL ab dem Jahr 2030 erst wieder Probleme hat. Der Grund liegt in einem Wrap-Around des (internen) 31 Bit Wertes für die Zahl der Sekunden seit dem 1.1.1970. Leider haben viele Datenbankhersteller diesen Test noch nicht durchgeführt. Falls also bei einer Versicherung, Bank o.ä. die Verfallsdaten von langfristigen Verträgen gespeichert werden müssen, gibt es erhebliche Probleme (hehe !), den Normalanwender sollte dies aber nicht interessieren.


Weiter Zurück [Inhalt] Online Suche im Handbuch