djm*_*ini 3 mysql double alter-table
需要更改表字段的类型(带数据)。从Float类型到Double类型。执行此操作的代码:
ALTER TABLE `my_table`
CHANGE COLUMN `my_value` `my_value`
DOUBLE NULL DEFAULT NULL AFTER `id`;
Run Code Online (Sandbox Code Playgroud)
但我遇到了一个问题:所有小数都变质了:旧值 -> 新值:
129.8 -> 129.8000030517578
117.9 -> 117.9000015258789
99.2 -> 99.19999694824219
Run Code Online (Sandbox Code Playgroud)
如何在不损坏数据的情况下更改字段类型?
为了实现这一目标,我是这样做的:
1 变体:首先转换为 VARCHAR(255):
ALTER TABLE `my_table`
CHANGE COLUMN `my_value` `my_value`
VARCHAR(255) NULL DEFAULT NULL AFTER `id`;
Run Code Online (Sandbox Code Playgroud)
第二次转换成DOUBLE:
ALTER TABLE `my_table`
CHANGE COLUMN `my_value` `my_value`
DOUBLE NULL DEFAULT NULL AFTER `id`;
Run Code Online (Sandbox Code Playgroud)
2 变体:首先转换为 DOUBLE(10,2):
ALTER TABLE `my_table`
CHANGE COLUMN `my_value` `my_value`
DOUBLE(10,2) NULL DEFAULT NULL AFTER `id`;
Run Code Online (Sandbox Code Playgroud)
第二次转换成DOUBLE:
ALTER TABLE `my_table`
CHANGE COLUMN `my_value` `my_value`
DOUBLE NULL DEFAULT NULL AFTER `id`;
Run Code Online (Sandbox Code Playgroud)
会不会有什么问题呢?