Поиск

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

Типами даты и времени представления значений времени и даты являются DATETIME, DATE, TIMESTAMP, TIME и YEAR. Каждый их временных типов имеет диапазон допустимых значений, а также нулевого значения, используемого, когда вы указываете неверное значение, которое MySQL не может представить. Тип TIMESTAMP имеет специальное ав­томатическое поведение при обновлении, которое будет описано далее.
MySQL позволяет сохранять некоторые нестрого правильные даты, такие как '1999-05-31'. Причина состоит в том, что мы считаем, что проверка корректности да­ты - обязанность приложения, а не SQL-сервера. Чтобы обеспечить более высокую ско­рость проверки дат, MySQL проверяет только, чтобы месяц был от 0 до 12, а день - от О до 31. Эти диапазоны включают нулевые значения, так как MySQL позволяет сохранять а столбцах типа DATE и DATETIME даты, у которых месяц и день равны нулю. Это очень удобно для приложений, которым необходимо хранить дни рождения, для которых не­известна точная дата. В этом случае вы просто сохраняете дату вроде '1999-00-00' или ' 1999-01-00'. Если вы сохраняете дату в таком виде, то не должны ожидать корректных результатов от таких функций, как DATE_SUB() и DATE_ADD(), которые требуют в аргументах полной корректной даты.


Ниже приведены некоторые общие соглашения, которые следует иметь в виду при работе с типами времени и дат.

  1. MySQL извлекает значения типа времени и даты в стандартном формате вывода, но пытается интерпретировать множество форматов для вводимых значений (например, когда вы указываете значение времени и даты для присвоения или сравнения).Поддерживаются только форматы, описанные ниже. Ожидается, что вы будете вводить корректные значения, а при вводе значений в других форматах возможен непредсказуемый результат.
  2. Даты, содержащие двузначный год, неоднозначны, так как для них неизвестен век. MySQL интерпретирует двузначные годы по следующим правилам:
  1. Год в диапазоне 00-69 преобразуется в 2000-2069.
  2. Год в диапазоне 70-99 преобразуется в 1970-1999.
  1. Несмотря на то что MySQL старается интерпретировать значения в разных форматах, даты должны вводиться в порядке 'год-месяц-день' (например ' 98-09-04')вместо порядка 'месяц-день-год' или 'день-месяц-год', используемого где-либо (как например, '09-04-98' или '04-09-98').
  2. MySQL автоматически преобразует значения даты или времени, которые выходят за пределы диапазона, либо иным образом не соответствующие допустимым для
    данного типа (как описано в начале данного раздела), обращая их в нулевыезначения (табл.). Исключением является тип TIME, для которого величины, выходящие за пределы диапазона, смещаются в соответствующее допустимое граничное значение.

Таблица Нулевые значения для разных типов столбцов

Типстолбца Нулевое значение
DATETIME '0000-00-00 00:00:00
DATE '0000-00-00'
TIMESTAMP 00000000000000
TIME '00:00:00'
YEAR 0000

Нулевые значения являются специальными, но вы можете сохранять их и ссы­латься на них, используя константы, приведенные в таблице. Это можно делать также, используя ' 0' или 0, что проще.
Нулевые значения даты и времени, используемые через Connector/ODBC (от версии 2.50.12 и выше), автоматически преобразуются в NULL, поскольку ODBC не может работать с такими значениями.