Rob*_*t H 12 mysql postgresql iso8601
我正在重新设计一个数据库,该数据库当前将格式为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
Run Code Online (Sandbox Code Playgroud)
不要将日期或时间戳值存储在varchar列中.您无法确保存储正确的值(没有人阻止您存储2012-02-31 28:99:70在那里.
如果您不需要时间部分,请使用date数据类型(在MySQL和PostgreSQL中可用),如果您确实需要时间使用timestamp(或datetime在MySQL)数据类型.
值的格式化应该在您的前端完成,或者如果您必须在SQL中使用例如to_char()(或MySQL中的等价物)来检索值.
再次:永远不要在varchar中存储日期或时间戳(就像你永远不应该在varchar列中存储实数一样).
以下是日期/时间数据类型的MySQL概述:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-types.html
以下是date7time数据类型的PostgreSQL概述:http://www.postgresql.org/docs/current/static/datatype-datetime.html
编辑
如果你担心文字格式.两个DBMS都支持标准的ANSI Date和Timestamp文字:
insert into some_table
(ts_column, date_column)
values
(timestamp '2012-10-27T07:30:38+00:00', DATE '2012-12-30');
Run Code Online (Sandbox Code Playgroud)
SQLFiddle for PostgreSQL:http://sqlfiddle.com/#!12/cdd39/1
注意关键字timestamp和date字符文字前面.
编辑2
似乎MySQL无法插入这样的值,尽管它可以在SELECT语句中使用该文字:
| 归档时间: |
|
| 查看次数: |
12240 次 |
| 最近记录: |