Mysql将列数据类型从整数更改为十进制(3,2),而不会丢失旧数据

ztmd8pv5  于 2023-01-29  发布在  Mysql
关注(0)|答案(2)|浏览(148)

我有一个int(10)unsigned类型的price列,但是由于某些原因,我需要将列的类型更改为decimal(3,2),我如何才能做到这一点而不丢失已经用int(10)存储的数据呢?

ALTER TABLE packages MODIFY price  decimal(3,2)

但是这个命令把所有值都改成了9,99?
我怎样才能把痛苦降到最低?

bmvo0sr5

bmvo0sr51#

你的价格可能会被降到你给出的最大允许小数。

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;
wztqucjr

wztqucjr2#

如果您不需要备份和/或只想转换数据类型,只需通过此sql脚本转换数据类型:
/* 转换列数据类型 */
ALTER TABLE价格表修改列价格列小数(3,2);

相关问题