Решение “проблемы 2000 года

В сервере MySQL известная “проблема 2000 года” (Y2K) полностью решена.

  • В MySQL используются функции времени Unix, которые обрабатывают даты
    вплоть до 2037 года как значения типа TIMESTAMP. Для значений типа date и
    DATETIME допустима работа с датами вплоть до 9999 года.
  • Все функции времени MySQL хранятся в одном исходном файле – sql/time.cc;
    они реализованы настолько тщательно, что являются безопасными в контексте
    “проблемы 2000 года”.
  • В MySQL 3.22 и последующих версиях столбцы типа YEAR могут хранить год 0 и
    значения лет от 1901 до 2155 в одном байте и отображать их в виде двузначного
    или четырехзначного числа. Все двузначные годы рассматриваются как принад­
    лежащие диапазону от 1970 до 2069; это означает, что если в столбце YEAR сохра­
    няется значение 01, MySQL трактует его как 2001 год.


    Приведенный далее код служит простой демонстрацией того, что сервер MySQL не имеет проблем со значениями типов DATE и DATETIME вплоть до 9999 года, а со значе­ниями типа TIMESTAMP – после 2030 года.

mysql> DROP TABLE IF EXISTS y2k;


Query OK, 0 rows affected (0.01 sec)


(Запрос успешно выполнен, затронуто 0 строк (0.01 с))


raysql> 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 (Записей: 14 Дубликатов: 0 Предупреждений: 2)


mysql> SELECT * FROM y2k;



Таким образом, сам сервер MySQL защищен от “проблемы 2000 года”, а ответствен­ность за корректный ввод ложится на приложения.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: