胡杨树旁
1
原始: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 版本测试可以正常修改数据类型
Kongdom
(Kongdom)
2
不支持有损变更,10位整数变成8位整数+2位小数是有损变更了。
可以改成decimal(12,2) ,应该就不报错了。
1 个赞
一般int修改为decimal类型都是新建表或者列,然后把数据弄过去吧,没有直接改的
1 个赞
哈喽沃德
5
行建列,数据迁移,然后删除旧列。你这属于损失精度。
1 个赞
你插入一个10位数字进去,转成DECIMAL(10,2)能转吗?
Kongdom
(Kongdom)
7
他这个是有损变更,改成decimal(12,2)应该就不需要了吧。
我还以为你说的是正常场景呢~我就想,改个字段类型还用这么麻烦嘛~
1 个赞
linnana
(Ti D Ber J2cwia3 K)
9
int类型原值应该有超过8位数decimal最大值
linnana
(Ti D Ber J2cwia3 K)
11
select max(person_month) from tabname 查询看下当前最大值
胡杨树旁
14
最大值是231,应该不是精度有损吧。7.1版本的可以修改
Kongdom
(Kongdom)
17
2 个赞
Kongdom
(Kongdom)
19
貌似是5.1开始支持的,有相关版本环境的同学可以测试验证一下~
2 个赞
并不会一行一行检查你的数据,因为检查类型是否安全,这种操作应该是不太规范的变更方式