有必要更改表字段的类型(包含数据)。 从Float类型到Double类型。 执行此操作的代码:
ALTER TABLE `my_table`
CHANGE COLUMN `my_value` `my_value`
DOUBLE NULL DEFAULT NULL AFTER `id`;
但是我遇到了一个问题: 所有分数都变坏了: 旧值 - >新价值:
129.8 -> 129.8000030517578
117.9 -> 117.9000015258789
99.2 -> 99.19999694824219
如何在没有数据损坏的情况下更改字段类型?
答案 0 :(得分:3)
你不能。 FLOAT和DOUBLE类型表示近似数字数据值。它们以这样的方式存储,即它们可以包含各种数字(从非常大到非常小),但代价是有点不准确。 有关详细信息,请参阅Floating point types。
如果您需要此准确度,请转而使用DECIMAL等Fixed point types。
答案 1 :(得分: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`;
会有任何问题吗?
答案 2 :(得分:0)
试试这个:
ALTER TABLE `my_table`
CHANGE COLUMN `my_value` `my_value`
DOUBLE(10,2) NULL DEFAULT NULL AFTER `id`;
答案 3 :(得分:0)
试试这个: -
ALTER TABLE `table`
CHANGE COLUMN `my_value` `my_value`
decimal(10,2) NULL DEFAULT NULL AFTER `id`;