Spec-Zone.ru › MySQL 5.7

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».

  • DATE

    Дата. Поддерживаемый диапазон — от '1000-01-01' до '9999-12-31'. MySQL отображает значения DATE в формате 'YYYY-MM-DD', но позволяет назначать значения столбцам DATE с помощью строк или чисел.

  • DATETIME[(fsp)]

    Комбинация даты и времени. Поддерживаемый диапазон — от '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».

  • TIMESTAMP[(fsp)]

    Отметка времени. Диапазон — от '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 в таблице может быть определён с этими свойствами.

  • TIME[(fsp)]

    Время. Диапазон — от '-838:59:59.000000' до '838:59:59.000000'. MySQL отображает значения TIME в формате 'hh:mm:ss[.fraction]', но позволяет назначать значения столбцам TIME с помощью строк или чисел.

    Допускается необязательное значение fsp в диапазоне от 0 до 6 для указания точности дробной части секунды. Значение 0 указывает на отсутствие дробной части. Если значение опущено, то по умолчанию точность составляет 0.

  • YEAR[(4)]

    Год в формате с четырьмя цифрами. 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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/date-and-time-type-syntax.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API