得到错误“Mysql2 ::错误:错误的时间值:'---”同时保存在铁轨中的记录?

时间:2015-09-18 12:21:48

标签: ruby-on-rails date datetime

我有桌子punch_in_outs。并且在具有以下代码的相应模型中。

class PunchInOut < ActiveRecord::Base
    belongs_to :employee
    serialize :check_in, Array
    serialize :check_out, Array
end 

并且在迁移中我有以下代码

class ChangePunchInOutFields < ActiveRecord::Migration
  def change
    change_column :punch_in_outs, :date,  :date
    change_column :punch_in_outs, :check_in,  :time
    change_column :punch_in_outs, :check_out,  :time 
  end
end

当我尝试创建记录时,我收到错误Mysql2::Error: Incorrect time value: '---

2.2.2 :001 > reload!
Reloading...
 => true 
2.2.2 :002 > p = PunchInOut.new
 => #<PunchInOut id: nil, employee_id: nil, check_in: [], check_out: [], date: nil, created_at: nil, updated_at: nil, shift_id: nil, shift_name: nil> 
2.2.2 :003 > p.check_in << Time.now
 => [2015-09-18 17:45:39 +0530] 
2.2.2 :004 > p.save
   (0.3ms)  BEGIN
  SQL (2.2ms)  INSERT INTO `punch_in_outs` (`check_in`, `check_out`, `created_at`, `updated_at`) VALUES ('---\n- 2015-09-18 17:45:39.760533268 +05:30\n', '--- []\n', '2015-09-18 12:15:44', '2015-09-18 12:15:44')
Mysql2::Error: Incorrect time value: '---
- 2015-09-18 17:45:39.760533268 +05:30
' for column 'check_in' at row 1: INSERT INTO `punch_in_outs` (`check_in`, `check_out`, `created_at`, `updated_at`) VALUES ('---\n- 2015-09-18 17:45:39.760533268 +05:30\n', '--- []\n', '2015-09-18 12:15:44', '2015-09-18 12:15:44')
   (0.2ms)  ROLLBACK
ActiveRecord::StatementInvalid: Mysql2::Error: Incorrect time value: '---
- 2015-09-18 17:45:39.760533268 +05:30

请帮帮我。

3 个答案:

答案 0 :(得分:0)

什么是正确的mysql datetime literal:&#39; 2012-12-31 11:30:45&#39;。

我相信你的文字是&#34; 2015-09-18 17:45:39.760533268 +05:30&#34;。 有关正确的mysql日期时间格式的更多信息,请检查链接。祝你好运!

答案 1 :(得分:0)

您正在使用serialize定义check_incheck_out属性。这意味着活动记录将它们转换为YAML表示并尝试将该YAML表示存储为字符串。

当它试图将yAML序列化存储在mysql时间字段中时,mysql会响应你正在获取的错误,因为mysql只是无法在时间列中存储YAML字符串

要存储一组时间对象,您需要check_incheck_out成为数据库中的字符串列(如果您要存储,甚至可能是文本列大阵列的时间)。

(您可能还需要考虑,如果您只想以小时,分钟和秒的形式存储Time.now返回完整日期的日期/时间的时间。这将按天/序列化月/年不仅仅是小时/分钟/秒。)

答案 2 :(得分:0)

请在此处查看相同问题的相应答案:https://stackoverflow.com/a/32654104/384417

您无法同时序列化并存储在时间列中。序列化产生了一个TEXT(实际上,以YAML格式编码),数据库并不知道它是一个日期或其他什么。

在TIME / TIMESTAMP / DATE列中,您只能存储单个值。