Ruby活动记录在mysql中插入日期时间而不是时间
Rails活动记录保存在插入查询中使用Ruby活动记录在mysql中插入日期时间而不是时间,mysql,ruby-on-rails,activerecord,time,Mysql,Ruby On Rails,Activerecord,Time,Rails活动记录保存在插入查询中使用datetime,尽管mysql中的数据类型是time,并且在保存之前在模型中设置了时间 mysql架构: rtime time DEFAULT NULL ActiveRecord模型:Abc abc = Abc.new {'rtime'=> '18:23 PM'} abc.save! 活动记录生成的对应mysql查询: insert into abces (rtime) values('2000-01-01 18:23:00'); 稍后在mys
datetime
,尽管mysql中的数据类型是time
,并且在保存之前在模型中设置了时间
mysql架构:
rtime time DEFAULT NULL
ActiveRecord模型:Abc
abc = Abc.new {'rtime'=> '18:23 PM'}
abc.save!
活动记录生成的对应mysql查询:
insert into abces (rtime) values('2000-01-01 18:23:00');
稍后在mysql中,只存储时间和日期,并生成警告
+-----------------------+
| rtime |
+-----------------------+
| 18:23:00 |
+-----------------------+`
为什么在插入mysql时日期会附加时间?Rails版本:3.2.16看起来ActiveRecord在Rails 3+中分配时间时通常会返回到DateTime对象: 这里有一些关于转换方法的文档:。此外,在同一文件的第180行有一条注释提示了这一点:
#我们实例化时间对象并将其转换回日期,从而使用时间逻辑处理无效日期
因此,Rails 3似乎经常将Time
对象视为DateTime
s,这就解释了您看到的奇怪的插入查询。Rails 4中的行为似乎有所改变,因此升级可以解决此问题
在任何情况下,日期值似乎只是被MySQL截断,因此出现了警告,但存储的时间对我来说似乎是正确的
最后,您这次需要时区吗?我现在不需要时区。是的,我知道rails正在这么做。它在select查询中也会这样做。只是想知道是否有办法把它关掉。升级rails是一件危险的事情,所以我可能只需要做一个本机mysql查询并直接运行它。