Ruby on rails 在Rails中:现有数据如何受到数据类型更改的影响?

Ruby on rails 在Rails中:现有数据如何受到数据类型更改的影响?,ruby-on-rails,database,ruby-on-rails-4,type-conversion,Ruby On Rails,Database,Ruby On Rails 4,Type Conversion,我正在开发Rails应用程序,希望更改现有列的数据类型。它当前是日期时间类型,我想将其更改为日期类型。我找到了这样做的方法,但在本例中,此人并不担心先前存在的数据 现在,我计划生成一个迁移 rails g migration change_my_column_in_my_talbe …并进行以下更改: class ChangeMyColumnInMyTable < ActiveRecord::Migration def change change_column :my_tab

我正在开发Rails应用程序,希望更改现有列的数据类型。它当前是日期时间类型,我想将其更改为日期类型。我找到了这样做的方法,但在本例中,此人并不担心先前存在的数据

现在,我计划生成一个迁移

rails g migration change_my_column_in_my_talbe
…并进行以下更改:

class ChangeMyColumnInMyTable < ActiveRecord::Migration
  def change
    change_column :my_table, :my_column, :date
  end
end
class ChangeMyColumnInMyTable
我的问题是:现有数据将转换为日期类型,还是需要创建一个rake任务来转换所有现有日期时间值的值

我发现了一个从布尔值到字符串的转换,并且似乎对现有数据的更改是自动的。我只是想在我开始改变之前确定一下


我正在使用Rails版本4.2.0和MySQL版本5.6.27自制。任何关于这个问题的建议都将不胜感激

change\u列
将被转换为一个
ALTER表。。。ALTER COLUMN
SQL语句,此时如何处理转换取决于您的数据库,因此完整答案取决于您使用的数据库。然而,您的数据库可以在datetime和date之间轻松转换,这是一个相当安全的赌注


也就是说,没有比测试更好的方法了

change\u列
将被转换为一个
ALTER表。。。ALTER COLUMN
SQL语句,此时如何处理转换取决于您的数据库,因此完整答案取决于您使用的数据库。然而,您的数据库可以在datetime和date之间轻松转换,这是一个相当安全的赌注


也就是说,没有比测试更好的方法了

使用
change\u列
方法,数据转换将由您正在使用的特定数据库适配器处理。例如,使用
mysql
适配器,
change\u column
将调用
ALTER TABLE tbl\u name MODIFY colu name DATE
。从DATETIME到DATE的数据转换将截断时间

此外,MYSQL DATETIME to DATE执行舍入,将日期值转换为小数秒并舍入时间,“1999-12-31 23:59:59.499”变为“1999-12-31”,而“1999-12-31 23:59:59.500”变为“2000-01-01”。无论哪种方式,
change
方法对于
change\u列
方法都是不可逆的


如果您计划反转此迁移,请改用
可逆
方法。

使用
更改列
方法,数据转换将由您正在使用的特定数据库适配器处理。例如,使用
mysql
适配器,
change\u column
将调用
ALTER TABLE tbl\u name MODIFY colu name DATE
。从DATETIME到DATE的数据转换将截断时间

此外,MYSQL DATETIME to DATE执行舍入,将日期值转换为小数秒并舍入时间,“1999-12-31 23:59:59.499”变为“1999-12-31”,而“1999-12-31 23:59:59.500”变为“2000-01-01”。无论哪种方式,
change
方法对于
change\u列
方法都是不可逆的


如果您计划逆转此迁移,请改用
reversible
方法。

我使用的是
mysql
;我应该在我的原始问题中包括这一点。感谢您的解释和提供链接!我使用的是
mysql
;我应该在我的原始问题中包括这一点。感谢您的解释和提供链接!我想出了一个方法来测试它,一切看起来都很好。谢谢你的帮助!我想出了一个方法来测试它,一切看起来都很好。谢谢你的帮助!