6.2.2.1 Проблема 2000 года и типы данных
Ядро MySQL само по себе устойчиво к ``проблеме 2000 года'' (see section 1.4.5 Вопросы, связанные с Проблемой-2000),
но некоторые представленные в MySQL входные
величины могут являться источниками ошибок. Так, любое вводимое значение,
содержащее двухразрядное значение года, является неоднозначным, поскольку
неизвестно столетие. Подобные величины должны быть переведены в
четырехразрядную форму, так как для внутреннего представления года в MySQL
используется 4 разряда.
Для типов DATETIME
, DATE
, TIMESTAMP
и YEAR
даты с неоднозначным годом
интерпретируются в MySQL по следующим правилам:
-
Величина года в интервале
00-69
конвертируется в 2000-2069
.
-
Величина года в интервале
70-99
конвертируется в 1970-1999
.
Следует помнить, что эти правила дают только правдоподобные предположения
о том, что ваши данные в действительности означают. Если применяемая MySQL
эвристика не дает правильных величин, необходимо обеспечить
недвусмысленные входные данные, содержащие четырехразрядные величины года.
ORDER BY
отсортирует двухразрядные YEAR/DATE/DATETIME
типы корректно.
Необходимо также отметить, что некоторые функции, такие как MIN()
и MAX()
будут преобразовывать TIMESTAMP/DATE
в число. Это означает, что столбец с
данными типа TIMESTAMP
, содержащими год в виде двух разрядов, не будет
правильно работать с указанными функциями. Выход из этого положения
состоит в преобразовании TIMESTAMP/DATE
к четырехразрядному формату или
использовании чего-нибудь вроде MIN(DATE_ADD(timestamp,INTERVAL 0 DAYS))
.