linux字符集与imp冲突,EXP/IMP 中涉及到的字符集的设定

EXP和IMP是Oracle中使用频率很高的数据导入导出的工具,当使用EXP/IMP将一个Server上的Oracle DB中的数据导入另一Server上另一个Oracle DB时,就涉及到了4个字符集的问题。4个字符集分别为:数据源Server的字符集、数据源DB的字符集、目标Server的字符集、目标DB的字符 集。4个字符集不同时如何在导入导出时设置环境变量NLS_LANG才能保证数据导出导入成功呢?下面以一个例子来解释这个问题。

例如:数据源Server OS字符集为Czech(捷克文字符集),数据源DB为Big5(繁体中文字符集),目标Server OS字符集Mexico(墨西哥字符集),目标DB字符集CHS(简体中文字符集)。现在要将数据源DB的数据使用EXP/IMP工具导入目标DB,在数 据源Server上导出前要设定环境变量NLS_LANG=Big5,生成数据文件后将数据文件传送到目标Server时,导入前要设定环境变量 NLS_LANG=Big5,这样才能保证导入成功。

下面对以上例子中设置环境变量的依据解释一下。首先看数据源,OS字符集为Czech,DB字符集为Big5,导出数据文件时,如果不设定环境变量 NLS_LANG,默认会按照OS的字符集生成数据文件,这样就会将Big5的数据按照Czech导出,字符集不一致的情况下可能会出现编码错误。所以要 将NLS_LANG设为Big5,环境变量是对OS而言的,这样就生成以Big5字符集编码的数据文件,Big5->Big5保证了数据的正确。当 数据文件传送到目标Server时,可知该数据文件是以Big5编码的,在导入目标DB时如果不设置环境变量,默认采用目标Server OS的字符集Mexico解析数据文件,Big5的数据文件采用Mexico字符集解析可能会出现问题,所以要设置环境变量NLS_LANG为Big5以 保证数据解析的正确。

现在也许还存在一个疑问,数据文件为Big5字符集,目标DB为CHS,环境变量NLS_LANG设置为Big5,能保证正确导入目标DB吗?其实在目标 Server解析数据文件存在一个先解析再插入的过程,数据文件先根据设定的环境变量的字符集解析成数据,而得到的数据再根据目标DB的字符集编码插入 DB,因此我们只要保证数据文件解析正确就可以了。

从前面的例子可以总结一个规律,那就是数据源Server和目标Server在执行导入导出前设定的环境变量NLS_LANG的值要与源DB一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值