我有一个类型为 int(10) unsigned 的价格列,但由于某种原因,我需要将列的类型更改为decimal(3,2),如何才能在不丢失已存储的数据的情况下执行此操作int(10)?
ALTER TABLE packages MODIFY price decimal(3,2)
但是这个命令将所有值更改为 9,99 ?
我怎样才能以最小的痛苦做到这一点?
最佳答案
您的价格可能会降至您指定的允许的最大小数点。尝试:
DELIMITER $$
CREATE PROCEDURE statement(IN dynamic_statement TEXT)
BEGIN
SET @dynamic_statement := dynamic_statement;
PREPARE prepared_statement FROM @dynamic_statement;
EXECUTE prepared_statement;
DEALLOCATE PREPARE prepared_statement;
END;
DELIMITER ;
SET @var_digit_length :=
(SELECT MAX(CEIL(LOG(10, ABS(price))))
FROM packages)
;
SET @var_precision := 2;
CALL statement(CONCAT('
ALTER TABLE packages MODIFY price decimal(',
(@var_digit_length + @var_precision), ',', @var_precision, ');
'));
DROP PROCEDURE statement;
关于Mysql将列数据类型从整数更改为小数(3,2)而不丢失旧数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56564848/