Spec-Zone.ru › MySQL 5.7

11.2 Типы данных даты и времени

  • 11.2.1 Синтаксис типов данных даты и времени
  • 11.2.2 Типы DATE, DATETIME и TIMESTAMP
  • 11.2.3 Тип TIME
  • 11.2.4 Тип YEAR
  • 11.2.5 Ограничения YEAR(2) с двумя значащими цифрами и миграция на YEAR с четырьмя цифрами
  • 11.2.6 Автоматическая инициализация и обновление для типов TIMESTAMP и DATETIME
  • 11.2.7 Дробные секунды во временных значениях
  • 11.2.8 Какой календарь используется MySQL?
  • 11.2.9 Преобразование между типами данных даты и времени
  • 11.2.10 Двузначные годы в датах

Типы данных даты и времени для представления временных значений — это DATE, TIME, DATETIME, TIMESTAMP и YEAR. Каждый временной тип имеет диапазон допустимых значений, а также значение “ноль”, которое может быть использовано, когда вы указываете недопустимое значение, которое MySQL не может представить. Типы TIMESTAMP и DATETIME имеют специальное поведение автоматического обновления, описанное в Разделе 11.2.6, «Автоматическая инициализация и обновление для TIMESTAMP и DATETIME».

Сведения о требованиях к хранению временных типов данных см. в Разделе 11.7, «Требования к хранению типов данных».

Описание функций, работающих со временными значениями, см. в Разделе 12.7, «Функции даты и времени».

При работе с типами даты и времени следует учитывать следующие общие моменты:

  • MySQL извлекает значения для заданного типа даты или времени в стандартном формате вывода, но пытается интерпретировать различные форматы входных значений, которые вы предоставляете (например, когда вы указываете значение, которое нужно назначить или сравнить с типом даты или времени). Описание допустимых форматов для типов даты и времени см. в Разделе 9.1.3, «Литералы даты и времени». Ожидается, что вы предоставите корректные значения. При использовании значений в других форматах могут возникнуть непредсказуемые результаты.

  • Хотя MySQL пытается интерпретировать значения в нескольких форматах, части даты всегда должны быть заданы в порядке год-месяц-день (например, '98-09-04'), а не в порядке месяц-день-год или день-месяц-год, обычно используемых в других местах (например, '09-04-98', '04-09-98'). Для преобразования строк в других порядках в порядок год-месяц-день может быть полезна функция STR_TO_DATE().

  • Даты, содержащие двузначные значения года, являются неоднозначными, так как век неизвестен. MySQL интерпретирует двузначные значения года по следующим правилам:

    • Значения года в диапазоне 70-99 становятся 1970-1999.

    • Значения года в диапазоне 00-69 становятся 2000-2069.

    См. также Раздел 11.2.10, «Двузначные годы в датах».

  • Преобразование значений из одного временного типа в другой происходит в соответствии с правилами Раздела 11.2.9, «Преобразование между типами данных даты и времени».

  • MySQL автоматически преобразует значение даты или времени в число, если значение используется в числовом контексте, и наоборот.

  • По умолчанию, когда MySQL сталкивается со значением для типа даты или времени, которое выходит за пределы допустимого диапазона или иным образом недопустимо для данного типа, оно преобразует значение в значение “ноль” для этого типа. Исключение составляют значения TIME , выходящие за пределы допустимого диапазона, которые обрезаются до соответствующей конечной точки диапазона TIME.

  • Установив SQL-режим на соответствующее значение, вы можете более точно указать, какие даты вы хотите поддерживать в MySQL. (См. Раздел 5.1.10, «Серверные SQL-режимы».) Вы можете заставить MySQL принять определенные даты, такие как '2009-11-31', включив SQL-режим ALLOW_INVALID_DATES. Это полезно, когда вы хотите сохранить в базе данных значение «возможно неправильное», указанное пользователем (например, в веб-форме) для последующей обработки. В этом режиме MySQL проверяет только то, что месяц находится в диапазоне от 1 до 12, а день — от 1 до 31.

  • MySQL позволяет хранить даты, где день или месяц и день равны нулю в столбце DATE или DATETIME. Это полезно для приложений, которым необходимо хранить даты рождения, точная дата которых может быть неизвестна. В этом случае вы просто храните дату как '2009-00-00' или '2009-01-00'. Однако для таких дат вы не должны ожидать получения корректных результатов для функций, таких как DATE_SUB() или DATE_ADD(), которые требуют полных дат. Чтобы запретить нулевые значения месяца или дня в датах, включите режим NO_ZERO_IN_DATE.

  • MySQL позволяет хранить значение “ноль” '0000-00-00' как “фиктивную дату”. В некоторых случаях это удобнее, чем использование значений NULL, и занимает меньше места в данных и индексах. Чтобы запретить '0000-00-00', включите режим NO_ZERO_DATE.

  • Значения даты или времени “ноль”, используемые через Connector/ODBC, автоматически преобразуются в NULL, так как ODBC не поддерживает такие значения.

В следующей таблице показан формат значения “ноль” для каждого типа. Значения “ноль” являются специальными, но вы можете явно хранить или ссылаться на них, используя значения, показанные в таблице. Вы также можете сделать это, используя значения '0' или 0, которые проще записывать. Для временных типов, которые включают часть даты (DATE, DATETIME и TIMESTAMP), использование этих значений может вызывать предупреждения или ошибки. Точное поведение зависит от того, какие из строгого режима и NO_ZERO_DATE SQL-режимов включены; см. Раздел 5.1.10, «Серверные SQL-режимы».

Тип данных Значение «ноль»
DATE '0000-00-00'
TIME '00:00:00'
DATETIME '0000-00-00 00:00:00'
TIMESTAMP '0000-00-00 00:00:00'
YEAR 0000

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/date-and-time-types.html

Spec-Zone.ru

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