11.2.1 Синтаксис типов данных даты и времени
Типы данных даты и времени для представления временных значений — это DATE, TIME, DATETIME, TIMESTAMP и YEAR.
Для описаний диапазонов DATE и DATETIME, “поддерживаемые” означает, что, хотя более ранние значения могут работать, нет гарантии.
MySQL допускает дробную часть секунды для значений TIME, DATETIME и TIMESTAMP, с точностью до микросекунд (6 цифр). Для определения столбца, включающего дробную часть секунды, используйте синтаксис , где type_name(fsp)type_name — это TIME, DATETIME или TIMESTAMP, а fsp — точность дробной части секунды. Например:
CREATE TABLE t1 (t TIME(3), dt DATETIME(6), ts TIMESTAMP(0));
Значение fsp, если задано, должно находиться в диапазоне от 0 до 6. Значение 0 указывает на отсутствие дробной части. Если значение опущено, то по умолчанию точность составляет 0. (Это отличается от стандартного значения SQL по умолчанию 6 для совместимости с предыдущими версиями MySQL.)
Любой столбец TIMESTAMP или DATETIME в таблице может иметь свойства автоматической инициализации и обновления; см. Раздел 11.2.6, «Автоматическая инициализация и обновление для TIMESTAMP и DATETIME».
-
Дата. Поддерживаемый диапазон — от
'1000-01-01'до'9999-12-31'. MySQL отображает значенияDATEв формате', но позволяет назначать значения столбцамYYYY-MM-DD'DATEс помощью строк или чисел. -
Комбинация даты и времени. Поддерживаемый диапазон — от
'1000-01-01 00:00:00.000000'до'9999-12-31 23:59:59.499999'. MySQL отображает значенияDATETIMEв формате', но позволяет назначать значения столбцамYYYY-MM-DD hh:mm:ss[.fraction]'DATETIMEс помощью строк или чисел.Допускается необязательное значение
fspв диапазоне от 0 до 6 для указания точности дробной части секунды. Значение 0 указывает на отсутствие дробной части. Если значение опущено, то по умолчанию точность составляет 0.Автоматическая инициализация и обновление до текущей даты и времени для столбцов
DATETIMEмогут быть заданы с помощьюDEFAULTиON UPDATE, как описано в Разделе 11.2.6, «Автоматическая инициализация и обновление для TIMESTAMP и DATETIME». -
Отметка времени. Диапазон — от
'1970-01-01 00:00:01.000000'UTC до'2038-01-19 03:14:07.499999'UTC. ЗначенияTIMESTAMPхранятся как количество секунд с момента эпохи ('1970-01-01 00:00:00'UTC). ЗначениеTIMESTAMPне может представлять значение'1970-01-01 00:00:00', поскольку это эквивалентно 0 секунд с момента эпохи, а значение 0 зарезервировано для представления'0000-00-00 00:00:00', значения “ноль”TIMESTAMP.Допускается необязательное значение
fspв диапазоне от 0 до 6 для указания точности дробной части секунды. Значение 0 указывает на отсутствие дробной части. Если значение опущено, то по умолчанию точность составляет 0.Способ обработки сервером определений
TIMESTAMPзависит от значения системной переменнойexplicit_defaults_for_timestamp(см. Раздел 5.1.7, «Системные переменные сервера»).Если
explicit_defaults_for_timestampвключено, то нет автоматического назначения атрибутовDEFAULT CURRENT_TIMESTAMPилиON UPDATE CURRENT_TIMESTAMPлюбому столбцуTIMESTAMP. Их необходимо включать явно в определении столбца. Также любой столбецTIMESTAMP, не объявленный какNOT NULL, допускает значенияNULL.Если
explicit_defaults_for_timestampотключено, сервер обрабатываетTIMESTAMPследующим образом:Если не указано иное, первый столбец
TIMESTAMPв таблице определяется как автоматически устанавливаемый на дату и время последнего изменения, если ему явно не присвоено значение. Это делаетTIMESTAMPполезным для записи отметки времени операцииINSERTилиUPDATE. Вы также можете установить любой столбецTIMESTAMPна текущую дату и время, присвоив ему значениеNULL, если он не определён с атрибутомNULLдля допуска значенийNULL.Автоматическую инициализацию и обновление до текущей даты и времени можно задать с помощью
DEFAULT CURRENT_TIMESTAMPиON UPDATE CURRENT_TIMESTAMP. По умолчанию, первый столбецTIMESTAMPобладает этими свойствами, как упоминалось ранее. Однако любой столбецTIMESTAMPв таблице может быть определён с этими свойствами. -
Время. Диапазон — от
'-838:59:59.000000'до'838:59:59.000000'. MySQL отображает значенияTIMEв формате', но позволяет назначать значения столбцамhh:mm:ss[.fraction]'TIMEс помощью строк или чисел.Допускается необязательное значение
fspв диапазоне от 0 до 6 для указания точности дробной части секунды. Значение 0 указывает на отсутствие дробной части. Если значение опущено, то по умолчанию точность составляет 0. -
Год в формате с четырьмя цифрами. MySQL отображает значения
YEARв форматеYYYY, но позволяет назначать значения столбцамYEARс помощью строк или чисел. Значения отображаются как1901до2155или0000.ПримечаниеТип данных
YEAR(2)устарел, и поддержка его удалена в MySQL 5.7.5. Для преобразования столбцов 2-значныхYEAR(2)в 4-значныеYEARстолбцы см. Раздел 11.2.5, «Ограничения YEAR(2) с двумя цифрами и переход к 4-значному YEAR».Для получения дополнительной информации о формате отображения
YEARи интерпретации входных значений см. Раздел 11.2.4, «Тип YEAR».
Функции агрегирования SUM() и AVG() не работают со временными значениями. (Они преобразуют значения в числа, теряя всё после первой нечисловой буквы.) Чтобы обойти эту проблему, преобразуйте значения в числовые единицы, выполните агрегацию и преобразуйте обратно во временное значение. Примеры:
SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col))) FROM tbl_name;
SELECT FROM_DAYS(SUM(TO_DAYS(date_col))) FROM tbl_name;
Сервер MySQL может быть запущен с включённым режимом SQL MAXDB. В этом случае TIMESTAMP идентичен DATETIME. Если этот режим включён при создании таблицы, столбцы TIMESTAMP создаются как столбцы DATETIME. В результате такие столбцы используют формат отображения DATETIME, имеют тот же диапазон значений, и нет автоматической инициализации или обновления до текущей даты и времени. См. Раздел 5.1.10, «Режимы SQL сервера».
Начиная с MySQL 5.7.22, режим MAXDB устарел; ожидается его удаление в будущей версии MySQL.
© 2025 Oracle
Licensed under the GPLv2 License.