2015-05-04 534 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`; 

将它有任何问题?