暂无图片
两端Oracle数据库字符编码不一样, 怎么导入导出?
我来答
分享
黎琛
2022-01-25
两端Oracle数据库字符编码不一样, 怎么导入导出?

两端Oracle数据库字符编码不一样, 怎么导入导出?

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
JiekeXu
暂无图片

在你导出时设置目标库的字符集环境变量尝试一下
export NLS_LANG=“SIMPLIFIED CHINESE_CHINA.ZHS16GBK”

如果不行可尝试如下方案:

原数据库为GBK字符集(oracle在varchar2类型中一个汉字占用两位),新数据库为UTF8字符集(一个汉子占用三位)。

解决方法如下,将原数据库所有含varchar2的字段的长度批量修改。

修改分为两步,varchar2最长支持4000的长度,若carchar2长度存在超过2667(4000*2/3)的,可修改为CLOB类型,或者验证字段中最长的使用长度,若低于2667,调整为4000即可。

批量修改方法如下:

create or replace procedure p_test as

CURSOR TEMP IS
SELECT TABLE_NAME, COLUMN_NAME, ceil(DATA_LENGTH*3/2) DATA_LENGTH
FROM USER_TAB_COLUMNS
WHERE DATA_TYPE = ‘VARCHAR2’
and DATA_LENGTH < 2000;
STR VARCHAR2(100) := ‘’;
BEGIN
FOR S IN TEMP LOOP
STR := ‘ALTER TABLE ’ || S.TABLE_NAME || ’ MODIFY(’ || S.COLUMN_NAME ||
’ VARCHAR2(’ || DATA_LENGTH || ‘))’;
DBMS_OUTPUT.PUT_LINE(STR);
EXECUTE IMMEDIATE STR;

END LOOP;
END;

注意:若存在字段的函数索引,批量修改会报错需将函数索引删除,才可执行。

暂无图片 评论
暂无图片 有用 1
暂无图片
黎琛
题主
2022-01-25
谢谢
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏