首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:不正确的日期值

问MySQL:不正确的日期值
EN

Stack Overflow用户
提问于 2014-02-08 21:46:10
回答 1查看 1.4K关注 0票数 1

我正在解析一个具有以下数据结构的xml文件:

代码语言:javascript
复制
  <row Id="253858" UserId="40883" Name="Scholar" Date="2009-03-08T01:52:32.570" />
  <row Id="253860" UserId="19483" Name="Supporter" Date="2009-03-08T01:57:31.733" />
  <row Id="253861" UserId="74951" Name="Autobiographer" Date="2009-03-08T02:02:32.390" />

我使用了一个ruby脚本来解析这些数据并将它们插入mysql数据库中。下面是我的数据表的样子:

代码语言:javascript
复制
+---------+-------------+------+-----+-------------------+-----------------------------+
| Field   | Type        | Null | Key | Default           | Extra                       |
+---------+-------------+------+-----+-------------------+-----------------------------+
| id      | int(11)     | NO   | PRI | NULL              |                             |
| user_id | int(11)     | NO   |     | NULL              |                             |
| name    | varchar(40) | YES  |     | NULL              |                             |
| created | timestamp   | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+---------+-------------+------+-----+-------------------+-----------------------------+

这个xml文件有大量的记录,在解析器进入第三条记录之前,我不会收到任何错误,所有数据都正确地解析并插入到表中:

代码语言:javascript
复制
| 253857 |   23658 | Critic             | 2009-03-08 01:52:32 |
| 253858 |   40883 | Scholar            | 2009-03-08 01:52:33 |
| 253860 |   19483 | Supporter          | 2009-03-08 01:57:32 |
+--------+---------+--------------------+---------------------+

但是,当我们使用row Id="253861"记录时,我会得到以下mysql错误:

代码语言:javascript
复制
load.rb:21:in `execute': Incorrect datetime value: '2009-03-08T02:02:32.390' for column 'created' at row 1 (Mysql::Error)
    from load.rb:21:in `on_start_element'
    from load.rb:133:in `parse'
    from load.rb:133:in `<main>'

万一需要添加记录的ruby方法:

代码语言:javascript
复制
  def on_start_element(element, attributes)
    if element == 'row'
      @st.execute(attributes['Id'], attributes['UserId'], attributes['Name'], attributes['Date'])
    end
  end
end

我认为这与脚本无关,因为我从xml文件中提取了记录,并试图直接插入mysql表中,得到了以下错误:

代码语言:javascript
复制
mysql> insert into badge values(253861,74951,'Autobiographer','2009-03-08T02:02:32.390');
ERROR 1292 (22007): Incorrect datetime value: '2009-03-08T02:02:32.390' for column 'created' at row 1

我还尝试在xml文件中插入上述记录之后的记录,并得到了相同的结果:

代码语言:javascript
复制
mysql> insert into badge values(253862,49628,'Teacher','2009-03-08T02:12:30.807');
ERROR 1292 (22007): Incorrect datetime value: '2009-03-08T02:12:30.807' for column 'created' at row 1

因此,日期字符串中的某些内容会使mysql不开心。我不知道的是,那个日期和以前有相同日期结构的记录没有任何问题。希望我能用信息解释清楚这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-08 22:50:09

既然您说要在几个地方插入日期,我建议您编写和帮助方法来进行日期转换,您可以在需要插入日期的任何地方重用这些转换。

代码语言:javascript
复制
require 'date'
def iso8601_to_mysql_datetime(date)
  DateTime.parse(date).to_time.strftime("%F %T")
end

iso8601_to_mysql_datetime('2009-03-08T02:02:32.390')
=> "2009-03-08 02:02:32"

注意:上面将ISO8601转换为MySQL理解的MySQL日期和时间文本文档的字符串,在这里可以找到:

http://dev.mysql.com/doc/refman/5.6/en/date-and-time-literals.html

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21652188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档