Spec-Zone.ru › MySQL 8.4

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

  • 13.2.1 Синтаксис типов данных даты и времени
  • 13.2.2 Типы DATE, DATETIME и TIMESTAMP
  • 13.2.3 Тип TIME
  • 13.2.4 Тип YEAR
  • 13.2.5 Автоматическая инициализация и обновление для TIMESTAMP и DATETIME
  • 13.2.6 Дробные секунды в значениях времени
  • 13.2.7 Какой календарь используется MySQL?
  • 13.2.8 Преобразование между типами даты и времени
  • 13.2.9 Двухзначные годы в датах

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

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

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

Имейте в виду эти общие соображения при работе с типами даты и времени:

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

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

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

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

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

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

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

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

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

  • Установив режим SQL на соответствующее значение, вы можете более точно указать, какие типы дат должен поддерживать MySQL. (См. Раздел 7.1.11 «Режимы 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; см. Раздел 7.1.11 «Режимы 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-8.4-en/date-and-time-types.html

Spec-Zone.ru

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