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 и режим SQLNO_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.