Datatypes

在 Rails 中:現有數據如何受數據類型更改的影響?

  • March 4, 2017

我正在開發 Rails 應用程序,並希望更改現有列的數據類型。它目前是 DateTime 類型,我想將其更改為 Date 類型。我在這裡找到了一種方法,但在這種情況下,這個人並不擔心預先存在的數據。

現在,我計劃生成一個遷移…

rails g migration change_my_column_in_my_talbe

…並進行以下更改:

class ChangeMyColumnInMyTable < ActiveRecord::Migration
 def change
   change_column :my_table, :my_column, :date
 end
end

我的問題是:將現有數據轉換為 Date 類型,還是需要創建一個 rake 任務來轉換所有現有 DateTime 值的值?

我發現了一個類似的問題,其中轉換是從 Boolean 到 String,而且對於現有數據來說,這種變化似乎是自動的。在我開始做出這個改變之前,我只是想確定一下。

我正在使用 Rails 4.2.0 版和 MySQL 5.6.27 版 Homebrew。對此問題的任何建議將不勝感激!

我能夠設置一種方法來對此進行測試,並且現有數據確實從 DateTime 轉換為 Date 類型!如此處所述,當使用 MySQL 作為適配器執行此操作時, usingchange_table會觸發以下 SQL 呼叫:

ALTER TABLE table_name MODIFY COLUMN column_name DATE

兩個有用的警告@SacWebDeveloper提供)

  1. 這是一個不可逆的更改,因此如果其他人正在嘗試此操作並且可能需要反轉,請務必使用該reversible命令或寫出upanddown更改。
  2. 從 DateTime 轉換為 Date 時,請注意舍入使用秒的小數部分。範例:‘1999-12-31 23:59:59.499’ => ‘1999-12-31’,但 ‘1999-12-31 23:59:59.500’ => ‘2000-01-01’。

引用自:https://dba.stackexchange.com/questions/131086