修改字段类型报错:Unsupported modify column

原始:person_month int(10) DEFAULT NULL COMMENT ‘预计人/月’,
ALTER TABLE test.biz_demand_assessment_info MODIFY COLUMN person_month decimal(10,2) NULL COMMENT ‘预计人/月’;
报错信息:Unsupported modify column: type decimal(10,2) not match origin int(10)

TiDB 中的 ALTER TABLE 语法主要存在以下限制:

  • 单条 ALTER TABLE 语句不能完成多项操作。
  • 当前不支持有损更改,例如从 BIGINT 类型更改为 INT 类型。
  • 不支持空间数据类型。
    但是看没有说不支持int修改为decimal类型,在7.1 版本测试可以正常修改数据类型

不支持有损变更,10位整数变成8位整数+2位小数是有损变更了。

可以改成decimal(12,2) ,应该就不报错了。

1 个赞

一般int修改为decimal类型都是新建表或者列,然后把数据弄过去吧,没有直接改的

1 个赞

:flushed:还有这么个小tips么?为什么呀?

1 个赞

行建列,数据迁移,然后删除旧列。你这属于损失精度。

1 个赞

你插入一个10位数字进去,转成DECIMAL(10,2)能转吗?

:yum:他这个是有损变更,改成decimal(12,2)应该就不需要了吧。
我还以为你说的是正常场景呢~我就想,改个字段类型还用这么麻烦嘛~

1 个赞


也报这个错误

int类型原值应该有超过8位数decimal最大值

select max(person_month) from tabname 查询看下当前最大值

最大值是231,应该不是精度有损吧。7.1版本的可以修改

v4版本估计不支持int类型转decimal

新增decimal字段,数据update过去试试

:flushed:看这段描述的意思是,int型的就不能修改啊。奇怪奇怪~
https://docs.pingcap.com/zh/tidb/v4.0/sql-statement-modify-column

2 个赞

试一下decimal(16,4)呢?

我在v6.5.2执行是可以变更的。
image

1 个赞

貌似是5.1开始支持的,有相关版本环境的同学可以测试验证一下~

2 个赞

并不会一行一行检查你的数据,因为检查类型是否安全,这种操作应该是不太规范的变更方式

应该是精度问题造成的吧。


估计是不支持修改,我找个5.1* 的环境试试