MySQL Server itself has no problems with Year 2000 (Y2K) compliance:
MySQL Server uses Unix time functions that handle dates into
the year 2038
for
TIMESTAMP
values. For
DATE
and
DATETIME
values, dates
through the year 9999
are accepted.
All MySQL date functions are implemented in one source file,
sql/time.cc
, and are coded very
carefully to be year 2000-safe.
In MySQL, the YEAR
data type
can store the years 0
and
1901
to 2155
in one
byte and display them using two or four digits. All
two-digit years are considered to be in the range
1970
to 2069
, which
means that if you store 01
in a
YEAR
column, MySQL Server
treats it as 2001
.
Although MySQL Server itself is Y2K-safe, you may run into
problems if you use it with applications that are not Y2K-safe.
For example, many old applications store or manipulate years
using two-digit values (which are ambiguous) rather than
four-digit values. This problem may be compounded by
applications that use values such as 00
or
99
as “missing” value
indicators. Unfortunately, these problems may be difficult to
fix because different applications may be written by different
programmers, each of whom may use a different set of conventions
and date-handling functions.
Thus, even though MySQL Server has no Y2K problems, it is the application's responsibility to provide unambiguous input. Any value containing a two-digit year is ambiguous, because the century is unknown. Such values must be interpreted into four-digit form because MySQL stores years internally using four digits.
For DATETIME
,
DATE
,
TIMESTAMP
, and
YEAR
types, MySQL interprets
dates with ambiguous year values using the following rules:
Year values in the range 00-69
are
converted to 2000-2069
.
Year values in the range 70-99
are
converted to 1970-1999
.
Remember that these rules are only heuristics that provide reasonable guesses as to what your data values mean. If the rules used by MySQL do not produce the correct values, you should provide unambiguous input containing four-digit year values.
ORDER BY
properly sorts
TIMESTAMP
or
YEAR
values that have two-digit
years.
Some functions like MIN()
and
MAX()
convert a
TIMESTAMP
or
YEAR
to a number. This means that
a value with a two-digit year does not work properly with these
functions. The fix in this case is to convert the
TIMESTAMP
or
YEAR
to four-digit year format or
use something like
MIN(DATE_ADD(timestamp,INTERVAL 0
DAY))
.
User Comments
Add your own comment.