Ruby活动记录在mysql中插入日期时间而不是时间

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

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');
稍后在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查询并直接运行它。