我需要在我的數據庫更改幾個字段:將數據類型十進制更改爲浮點數會導致數據丟失嗎?
:decimal, :precision => 8, :scale => 5
到:
:float
是否在數據丟失這個migation結果呢?當前數據由0到999之間的整數組成。
如果此遷移將影響已存儲的這些數字,如何保持此數據安全?
設置:在Heroku上運行的Ruby on Rails 3(解決方案需要適用於PostgreSQL和MySQL)。
我需要在我的數據庫更改幾個字段:將數據類型十進制更改爲浮點數會導致數據丟失嗎?
:decimal, :precision => 8, :scale => 5
到:
:float
是否在數據丟失這個migation結果呢?當前數據由0到999之間的整數組成。
如果此遷移將影響已存儲的這些數字,如何保持此數據安全?
設置:在Heroku上運行的Ruby on Rails 3(解決方案需要適用於PostgreSQL和MySQL)。
0到999之間的整數將適用於任何一種,數據不會受到影響。如果它只是整數 - 爲什麼不使用int
s?
它會,如果你需要對你的數字做精確的比較或浮點運算。打開PostgreSQL和嘗試這個辦法:
select floor(.8::float * 10.0::float); -- 8
select floor((.1::float + .7::float) * 10.0::float); -- 7
見的原因此相關的問題:
Why do simple doubles like 1.82 end up being 1.819999999645634565360?
感謝您的回答 - 我更擔心字面上會丟失我的數字,而不是讓他們稍微偏離原來的價值。如果字段從限制性小數變成浮點數或更大的小數(更高的精度),我認爲這意味着我的數據將保持安全? – sscirrus 2011-05-15 05:08:36
那麼,在這種情況下,是的,如果您使用'ALTER TABLE'語句來修改列的類型,那麼您就很安全。 RoR也可能完成這項工作,但我真的不知道 - 儘管如此,我會比對基於ruby的SQL diff工具更加信任我的類型。 – 2011-05-15 05:14:02
它不會永遠是整數:) – sscirrus 2011-05-15 05:06:56
所以,只要當前數據符合字面上在新的數據類型中,它會好嗎? – sscirrus 2011-05-15 05:07:21
我會這麼認爲 - 你可以隨時備份你的'development.db'以防萬一。如果在恢復備份之前出現問題,請從更改中退出。 – zsalzbank 2011-05-15 05:10:33