Spec-Zone.ru › MySQL 5.7

11.2.2 Типы DATE, DATETIME и TIMESTAMP

Типы DATE, DATETIME и TIMESTAMP связаны. В данном разделе описываются их характеристики, сходства и различия. MySQL распознает значения DATE, DATETIME и TIMESTAMP в нескольких форматах, описанных в разделе 9.1.3 «Литералы дат и времени». Для описаний диапазонов DATE и DATETIME, “поддерживаемые” означает, что, хотя более ранние значения могут работать, гарантии нет.

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

Тип DATETIME используется для значений, содержащих как часть даты, так и часть времени. MySQL извлекает и отображает значения DATETIME в формате 'YYYY-MM-DD hh:mm:ss'. Поддерживаемый диапазон — '1000-01-01 00:00:00' по '9999-12-31 23:59:59'.

Тип данных TIMESTAMP используется для значений, содержащих как часть даты, так и часть времени. Диапазон значений TIMESTAMP составляет от '1970-01-01 00:00:01' UTC до '2038-01-19 03:14:07' UTC.

Значения типа DATETIME или TIMESTAMP могут включать конечную дробную часть секунды с точностью до микросекунд (6 цифр). В частности, любая дробная часть в значении, вставленном в столбец DATETIME или TIMESTAMP, сохраняется, а не отбрасывается. С включенной дробной частью формат этих значений — 'YYYY-MM-DD hh:mm:ss[.fraction]', диапазон значений DATETIME — от '1000-01-01 00:00:00.000000' до '9999-12-31 23:59:59.499999', а диапазон значений TIMESTAMP — от '1970-01-01 00:00:01.000000' до '2038-01-19 03:14:07.499999'. Дробная часть всегда должна быть отделена от остальной части времени десятичной точкой; другие разделители дробных секунд не распознаются. Дополнительную информацию о поддержке дробных секунд в MySQL см. в разделе 11.2.7 «Дробные секунды во временных значениях».

Типы данных TIMESTAMP и DATETIME обеспечивают автоматическую инициализацию и обновление текущей даты и времени. Дополнительную информацию см. в разделе 11.2.6 «Автоматическая инициализация и обновление для TIMESTAMP и DATETIME».

MySQL преобразует значения TIMESTAMP из текущей часовой зоны в UTC для хранения и обратно из UTC в текущую часовую зону для извлечения. (Это не происходит для других типов, таких как DATETIME.) По умолчанию текущая часовая зона для каждого подключения — это часовая зона сервера. Часовую зону можно установить для каждого подключения. Пока установка часовой зоны остается неизменной, вы получаете то же значение, которое сохранили. Если вы сохраните значение TIMESTAMP, а затем измените часовую зону и извлечете значение, полученное значение будет отличаться от сохраненного. Это происходит потому, что для преобразования в обоих направлениях не использовалась одинаковая часовая зона. Текущая часовая зона доступна как значение системной переменной time_zone. Дополнительную информацию см. в разделе 5.1.13 «Поддержка часовых поясов сервера MySQL».

Некорректные значения DATE, DATETIME или TIMESTAMP преобразуются в «нулевое» значение соответствующего типа ('0000-00-00' или '0000-00-00 00:00:00'), если это преобразование разрешено SQL-режимом. Точное поведение зависит от того, включены ли режим strict SQL и режим SQL NO_ZERO_DATE; см. раздел 5.1.10 «Режим SQL сервера».

Обратите внимание на определенные свойства интерпретации значений даты в MySQL:

  • MySQL допускает «свободный» формат для значений, указанных как строки, в котором любой значок пунктуации может использоваться в качестве разделителя между частями даты или времени. В некоторых случаях такая синтаксическая конструкция может ввести в заблуждение. Например, значение, такое как '10:11:12', может выглядеть как значение времени из-за :, но интерпретируется как год '2010-11-12', если используется в контексте даты. Значение '10:45:15' преобразуется в '0000-00-00', так как '45' — не допустимый месяц.

    Единственный разделитель, распознаваемый между частью даты/времени и дробной частью секунды, — десятичная точка.

  • Сервер требует, чтобы значения месяца и дня были допустимыми, а не просто находились в диапазоне от 1 до 12 и от 1 до 31 соответственно. При выключенном режиме strict некорректные даты, такие как '2004-04-31', преобразуются в '0000-00-00', и генерируется предупреждение. При включенном режиме strict некорректные даты генерируют ошибку. Чтобы разрешить такие даты, включите ALLOW_INVALID_DATES. Дополнительную информацию см. в разделе 5.1.10 «Режим SQL сервера».

  • MySQL не принимает значения TIMESTAMP, которые включают ноль в столбце дня или месяца, или значения, которые не являются допустимой датой. Единственным исключением из этого правила является специальное «нулевое» значение '0000-00-00 00:00:00', если это значение разрешено режимом SQL. Точное поведение зависит от того, включены ли режим strict SQL и режим SQL NO_ZERO_DATE; см. раздел 5.1.10 «Режим SQL сервера».

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

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

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

    См. также раздел 11.2.10 «2-значные годы в датах».

Примечание

Сервер 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/datetime.html

Spec-Zone.ru

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