问题分析
出现这个问题的原因是, 某列中包含的数据长度超出了建表时对该列的限制, 一般情况下修改出错列的长度设置, 然后重新建表即可. 不过有时问题会更复杂一些, 存储字符串常用的 VARCHAR2
类型的默认长度上限是 4000 bytes, 如果要存储的数据中包含超过 4000 bytes 的数据该如何解决?
问题解决
遇到 VARCHAR2
类型长度不够用的情况时, 可以考虑两种方案:
-
改用其它数据类型
如改为 LONG
或者 CLOB
, 这两种数据类型可以存储 GB 级别的字符串, 但也有各自的局限, LONG
类型在一张表中只能出现一次, CLOB
在读取时比较麻烦
-
修改
VARCHAR2
数据类型的上限
根据官网的说明, VARCHAR2
的上限可以改为 32767 bytes, 下面给出 Non-CDB
型数据库的详细设置流程, CDB
型数据库的设置后面研究一下再补充, 参考官网教程
sudo su oracle // 切换为 Oracle 用户
sqlplus / as sysdba // 连接 sqlplus
shutdown immediate; // 关闭数据库
startup upgrade; // 以 upgrade 模式开启数据库
alter system set max_string_size=extended scope=spfile; // 修改字符串最大长度
@?/rdbms/admin/utl32k.sql; // 执行 utl32k.sql
shutdown immediate; // 关闭数据库
startup; // 以正常模式开启数据库
create table "TEST"("ID" varchar2(32727)); // 建表测试