Поиск

Проблема двухтысячного года (Y2K) и типы данных

MySQL сам по себе защищен от влияния проблемы 2000-го года (см. раздел Решение проблемы 2000 года), но входные значения, представляемые MySQL, могут быть не защищены. Любой ввод, со­держащий двузначное представление года, является неоднозначным, поскольку не ука­зан век. Такие значения должны быть преобразованы в четырехзначную форму, потому что MySQL хранит значения лет во внутреннем представлении длиной в четыре цифры.
Для типов DATETIME, date, TIMESTAMP и YEAR MySQL интерпретирует даты с неодно­значным представлением года по следующим правилам:

  1. Год в диапазоне 00-69 преобразуется в 2000-2069.
  2. Год в диапазоне 70-99 преобразуется в 1970-1999.

Помните, что эти правила представляют только обоснованные предположения об ис­тинном значении ваших данных. Если они не верны, вы должны однозначно указывать их, используя четырехзначный формат.

Конструкция ORDER BY правильно сортирует значения TIMESTAMP и YEAR с двузначным годом.
Некоторые функции, такие как MIN() и МАХ(), преобразуют TIMESTAMP или YEAR в число. Это означает, что значения с двузначным годом не работают правильно с этими функциями. Чтобы исправить ситуацию, нужно преобразовать столбцы TIMESTAMP или YEAR в четырехзначный формат года или использовать что-то вроде:
MIN(DATE_ADD(timestamp,INTERVAL 0 DAYS))