Datatypes
在 Rails 中:現有數據如何受數據類型更改的影響?
我正在開發 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 作為適配器執行此操作時, using
change_table
會觸發以下 SQL 呼叫:ALTER TABLE table_name MODIFY COLUMN column_name DATE
兩個有用的警告(@SacWebDeveloper提供):
- 這是一個不可逆的更改,因此如果其他人正在嘗試此操作並且可能需要反轉,請務必使用該
reversible
命令或寫出up
anddown
更改。- 從 DateTime 轉換為 Date 時,請注意舍入使用秒的小數部分。範例:‘1999-12-31 23:59:59.499’ => ‘1999-12-31’,但 ‘1999-12-31 23:59:59.500’ => ‘2000-01-01’。