Я переделываю базу данных, которая в настоящее время импортирует даты ISO 8601 в формате 2012-10-27T07:30:38+00:00
в поле varchar. Текущая база данных размещена на сервере MySQL 5.5.
При поиске в документации и различных сообщениях SO я не нашел однозначного ответа о том, какой тип данных мне следует использовать в MySQL для этой цели. Ближайшее сообщение: MySQL вставить в DATETIME: безопасно ли использовать формат ISO :: 8601?, где он обеспечивает своего рода обходной путь, однако это нежелательный вариант.
Документация MySQL (http://dev.mysql.com/doc/refman/5.5/en/date-and-time-types.html) не говорит, и единственная ссылка, которую я могу найти в официальной документации, находится на странице: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
в котором говорится: «Возможные значения для первого и второго аргументов приводят к нескольким возможным строкам формата (используемые спецификаторы см. в таблице в описании функции DATE_FORMAT ()). Формат ISO относится к ISO 9075, а не к ISO 8601.»
Теперь в документации PostgreSQL специально упоминается ISO8601 (http://www.postgresql.org/docs/9.2/static/datetime-keywords.html и http://www.postgresql.org/docs/9.2/static/datatype-datetime.html), что подводит меня к моему вопросу:
Правильно ли MySQL поддерживает ISO 8601, или мне следует рассмотреть базу данных с встроенной поддержкой?
--Редактировать--
Попытка вставить примерную отметку времени выше в столбец datetime дает следующую ошибку:
10:55:55 insert into test(date1) values('2012-10-27T07:30:38+00:00') Error Code: 1292. Incorrect datetime value: '2012-10-27T07:30:38+00:00' for column 'date1' at row 1 0.047 sec
timestamp
и выполняйте форматирование при отображении данных. Не используйте для этого varchar - person a_horse_with_no_name   schedule 30.10.2012TIMESTAMP
столбцы являются полумагическими, и их не следует использовать, если они вам не нужны.DATETIME
- это общий формат даты и времени илиDATE
только для даты. - person tadman   schedule 30.10.2012timestamp
не имеет магического поведения и соответствует типу данных MySQLdatetime
(хотя и с более высокой точностью) - person a_horse_with_no_name   schedule 30.10.2012TIMESTAMP
более ограничен с точки зрения допустимого времени, и первый из этих столбцов будет автоматически установлен на текущее время при вставке строки, если явно не указано значение, отличное от NULL. - person tadman   schedule 30.10.2012