问题描述
修改字段数据类型长度报错,原字符类型为 varchar(200 char),修改为 varchar(300) 报错。
ORA-01441: cannot decrease column length because some value is too big
示例如下。
重建测试表。
obclient [SYS]> create table t5( id int primary key, r1 varchar2(200 char)); Query OK, 0 rows affected (0.202 sec)修改字符类型。
obclient [SYS]> alter table t5 modify r1 varchar2(300); ORA-01441: cannot decrease column length because some value is too big
适用版本
OceanBase 数据库 V2.x 和 V3.x 版本。
问题原因
VARCHAR2(200 CHAR) 表示以字符为单位定义最大长度,也就是最多能存储 200 个字符。
VARCHAR2(200) 和 VARCHAR2(200 BYTE) 表示以字节为单位定义最大长度,也就是最多能存储 200 个字节。
VARCHAR2(200 CHAR) 实际存储字符长度由于字符编码的原因大于 VARCHAR2(300 [BYTE]) ,所以当增加字段长度的时候报错。
ORA-01441:cannot decrease column length because some value is too big 。
解决方法
指定关键词 CHAR。
oclient [SYS]> alter table t5 modify r1 varchar2(300 char);
Query OK, 0 rows affected (0.115 sec)
或者指定关键词 BYTE(UTF8 编码最大 1 个字符占用 4 个字节)。
obclient [SYS]> alter table t5 modify r1 varchar2(800 BYTE);
Query OK, 0 rows affected (0.078 sec)