2015-05-04 149 views
1

需要更改表字段的類型(帶數據)。 從浮動類型到雙重類型。mysql將float轉換爲double

129.8 -> 129.8000030517578 
117.9 -> 117.9000015258789 
99.2 -> 99.19999694824219 

如何改變字段類型不會發生數據損壞: -

ALTER TABLE `my_table` 
CHANGE COLUMN `my_value` `my_value` 
DOUBLE NULL DEFAULT NULL AFTER `id`; 

但是我有一個問題::: 所有小數惡化>新價值 舊值 執行此代碼?

回答

3

你不能。 FLOAT和DOUBLE類型表示近似數字數據值。它們的存儲方式使得它們可以包含各種各樣的數字(從很大到很小),但代價有點不準確。 有關更多信息,請參見Floating point types

如果您需要此準確度,請改爲使用DECIMAL的Fixed point types

0

試試這個:

ALTER TABLE `my_table` 
CHANGE COLUMN `my_value` `my_value` 
DOUBLE(10,2) NULL DEFAULT NULL AFTER `id`; 
+0

好主意,但我不能限制小數部分 – djmartini

0

試試這個: -

ALTER TABLE `table` 
CHANGE COLUMN `my_value` `my_value` 
decimal(10,2) NULL DEFAULT NULL AFTER `id`; 
+0

但我不能限制小數部分 – djmartini

1

要做到這一點,我已經這樣做了:

1變型: 首先轉化爲VARCHAR(255):

ALTER TABLE `my_table` 
CHANGE COLUMN `my_value` `my_value` 
VARCHAR(255) NULL DEFAULT NULL AFTER `id`; 

第二轉化成DOUBLE:

ALTER TABLE `my_table` 
CHANGE COLUMN `my_value` `my_value` 
DOUBLE NULL DEFAULT NULL AFTER `id`; 

2變體: 首先轉換成DOUBLE(10,2):

ALTER TABLE `my_table` 
CHANGE COLUMN `my_value` `my_value` 
DOUBLE(10,2) NULL DEFAULT NULL AFTER `id`; 

第二轉換成DOUBLE:

ALTER TABLE `my_table` 
CHANGE COLUMN `my_value` `my_value` 
DOUBLE NULL DEFAULT NULL AFTER `id`; 

將它有任何問題?