首先,LENGTH_IN_CHAR(默认以字节为单位进行存储)。该参数在2024年第二季度版本:8.1.3.162取消
由于参数改动后,可能带来以前适配的应用商初始化以字符为单位进行存储(LENGTH_IN_CHAR=1)情况,而客户现场实际环境为新版本达梦,已取消该参数,从而导致应用商在客户现场导入基础表以及数据库导致数据截断问题。
应用商对内部表结构进行调整,通过脚本批量修改字段,指的以字符为单位进行存储。
开启length_in_char参数,相当于隐式指定 字段名 VARCHAR(10 CHAR),因此我们可以手动调整显示指定,以便适用于未开启LENGTH_IN_CHAR=1的环境
SELECT 'ALTER TABLE '||OWNER||'.'||TABLE_NAME||' MODIFY '||COLUMN_NAME||' '||DATA_TYPE||'('||DATA_LENGTH||' CHAR);'
FROM DBA_TAB_COLS
WHERE DATA_TYPE IN ('VARCHAR','VARCHAR2') AND OWNER='USER_NAME'
create table test01(c1 varchar(10),c2 VARCHAR(10 char));
INSERT INTO TEST01(C1) VALUES('一二三');
INSERT INTO TEST01(C1) VALUES('一二三四五六七八九十');--插入C1列报错截断
INSERT INTO TEST01(C2) VALUES('一二三四五六七八九十');
COMMIT;
调整后再进入DEXP导出DMP文件即可在客户环境(LENGTH_IN_CHAR=0)完成导入
文章
阅读量
获赞