【发布时间】:2012-10-19 22:28:36
【问题描述】:
我正在重新设计一个数据库,该数据库当前以2012-10-27T07:30:38+00:00 的格式将 ISO 8601 日期导入 varchar 字段。当前数据库托管在 MySQL 5.5 服务器上。
在搜索文档和各种 SO 帖子时,我还没有找到关于我应该在 MySQL 中为此使用什么数据类型的明确答案。最接近的帖子是:MySQL insert to DATETIME: is it safe to use ISO::8601 format?,它提供了各种解决方法,但这不是一个理想的选择。
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,还是我应该考虑使用原生支持的数据库?
--编辑--
尝试将上面的示例时间戳插入日期时间列会出现以下错误:
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
【问题讨论】:
-
由于日期格式问题而切换数据库似乎有点笨拙。您是否尝试过以所需格式插入值?如果是这样,发生了什么? MySQL 在允许的范围内通常非常宽松。
-
@tadman 不是说不是。不过,这次我希望能正确地做事。我的偏好是继续使用 MySQL,但使用正确的数据类型。
-
不要不将时间戳存储在 VARCHAR 列中。绝不。使用原生
timestamp数据类型并在显示数据时进行格式化。 不要为此使用 varchar -
TIMESTAMP列是半神奇的,除非您需要它们,否则不应使用它们。DATETIME是通用日期和时间格式,DATE仅用于日期。 -
@a_horse_with_no_name 因此这个问题:)
标签: mysql postgresql iso8601