注册
简介关于设置LENGTH_IN_CHAR=1时,如何调整导入LENGTH_IN_CHAR=0的数据库
专栏/培训园地/ 文章详情 /

简介关于设置LENGTH_IN_CHAR=1时,如何调整导入LENGTH_IN_CHAR=0的数据库

Y丶Charles 2025/01/14 414 0 0
摘要

背景

首先,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)完成导入

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服