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

标签 mysql

我有一个类型为 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/

相关文章:

PHP 将查询结果分组为嵌套关联数组

php - 如何通过url向mysql中添加数据

Mysql Entity Framework 问题 - 指定的键太长;最大 key 长度为 3072 字节

mysql - 替换sql中字符串的开头

mysql - 检查需要升级、损坏或未完全关闭的表

mysql - SQL 限制组合集

mysql - 试图在 MySQL 数据库中设置日期时间字段的 Ruby 错误

python - pymysql 事务保存一个插入查询但忽略两个更新查询而不引发错误

MySQL IN 与子查询性能奇怪的行为

mysql - 将一个表中的 SUM 值与另一个表中的变量相乘