楼主: linwz

怎么将字符集为US7ASCII的库中导出的数据导入到字符集为ZHS16GBK的库中?

[复制链接]
论坛徽章:
16
2010数据库技术大会纪念徽章
日期:2010-05-13 10:04:27ITPUB技术丛书作者
日期:2010-09-26 15:24:562011新春纪念徽章
日期:2011-01-25 15:41:01管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:11:18马自达
日期:2014-01-27 11:47:11
11#
发表于 2003-4-11 11:54 | 只看该作者
将字符集为US7ASCII的库中导出的数据导入到字符集为ZHS16GBK的库是不需要去该dmp文件的啊,这个我做过好几次了,不明白大家为什么都建议去改文件???

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
12#
发表于 2003-4-11 12:04 | 只看该作者

我在导入是出现 不支持要求的字符集转换(从类型1到852)

设置你的环境变量,讲 NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

应该是这个问题

coolyl: 你先看一下你的dmp文件里面究竟是什么?US7ASCII  exp 的时候NLS_LANG 也是 US7ASCII 么?
然后imp 的时候环境变量又是什么?

使用道具 举报

回复
论坛徽章:
314
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
13#
发表于 2003-4-11 12:32 | 只看该作者
最初由 coolyl 发布
[B]将字符集为US7ASCII的库中导出的数据导入到字符集为ZHS16GBK的库是不需要去该dmp文件的啊,这个我做过好几次了,不明白大家为什么都建议去改文件??? [/B]


很简单,导出时,必须是数据库的字符集与CLEINT
操作环境的字符集必须一致,楼主一开始就说明
数据库的字符集是US7ASCII的了,他必须在导出前
把环境设置为和数据库的一样,才能导出正确的DMP
文件。

BITI说的对,把2,3个字节的该为03 54,
我忘了第2个字节也要改。

使用道具 举报

回复
论坛徽章:
65
ITPUB元老
日期:2006-03-01 17:57:36马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:52
14#
发表于 2003-4-11 12:39 | 只看该作者
SQL> select nls_charset_id('zhs16gbk') from dual;

NLS_CHARSET_ID('ZHS16GBK')
--------------------------
                   852
为什么不是修改为0852

使用道具 举报

回复
论坛徽章:
16
2010数据库技术大会纪念徽章
日期:2010-05-13 10:04:27ITPUB技术丛书作者
日期:2010-09-26 15:24:562011新春纪念徽章
日期:2011-01-25 15:41:01管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:11:18马自达
日期:2014-01-27 11:47:11
15#
发表于 2003-4-11 12:49 | 只看该作者
在不同字符集的数据库之间导入数据的方法:
以US7ASCII的库中导出的数据导入到字符集为ZHS16GBK的库为例子:
假设US7ASCII的库是A机,字符集为ZHS16GBK的库为B机
1。确定你A机上的oracle用户的.profile文件中的NLS_LANG是US7ASCII,正常的导出所有数据。
2。然后传到B机上,bin模式,然后在B机上设定好oracle用户的设定环境变量NLS_LANG=AMERICAN_AMERICA.US7ASCII
以sys用户执行update props$ set values$='US7ASCII'
where name='NLS_CHARACSET';
3。正常的导入数据至ZHS16GBK的数据库中去,重新启动数据库,此时查看原来导入的数据应该已经中文了。
4。把环境变量改回来,NLS_LANG=AMERCIAN_AMERICA.ZHS16GBK
以sys用户登陆ZHS16GBK的数据库然后执行一下语句:
update props$ set values$='ZHS16GBK'
where name='NLS_CHARACSET';
重新启动数据库让其修改生效即可。
8。如果不放心,可以把当前ZHS16GBK数据库中的数据正常exp出来,然后重新建库后正常导入。

以上过程我在oracle9.2.0和9.0.1,8.1.7上测试成功。

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
16#
发表于 2003-4-11 12:50 | 只看该作者

16进制数

最初由 piner 发布
[B]SQL> select nls_charset_id('zhs16gbk') from dual;

NLS_CHARSET_ID('ZHS16GBK')
--------------------------
                   852
为什么不是修改为0852 [/B]


03  54   =  3*16*16 + 5*16 + 4 =  852   

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
17#
发表于 2003-4-11 12:59 | 只看该作者

你这样做

最初由 coolyl 发布
[B]在不同字符集的数据库之间导入数据的方法:
以US7ASCII的库中导出的数据导入到字符集为ZHS16GBK的库为例子:
假设US7ASCII的库是A机,字符集为ZHS16GBK的库为B机
1。确定你A机上的oracle用户的.profile文件中的NLS_LANG是US7ASCII,正常的导出所有数据。
2。然后传到B机上,bin模式,然后在B机上设定好oracle用户的设定环境变量NLS_LANG=AMERICAN_AMERICA.US7ASCII
以sys用户执行update props$ set values$='US7ASCII'
where name='NLS_CHARACSET';
3。正常的导入数据至ZHS16GBK的数据库中去,重新启动数据库,此时查看原来导入的数据应该已经中文了。
4。把环境变量改回来,NLS_LANG=AMERCIAN_AMERICA.ZHS16GBK
以sys用户登陆ZHS16GBK的数据库然后执行一下语句:
update props$ set values$='ZHS16GBK'
where name='NLS_CHARACSET';
重新启动数据库让其修改生效即可。
8。如果不放心,可以把当前ZHS16GBK数据库中的数据正常exp出来,然后重新建库后正常导入。

以上过程我在oracle9.2.0和9.0.1,8.1.7上测试成功。 [/B]


需要修改数据库字符集
何必呢

直接修改 DMP不更好?

使用道具 举报

回复
论坛徽章:
65
ITPUB元老
日期:2006-03-01 17:57:36马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:52
18#
发表于 2003-4-11 13:06 | 只看该作者
当然,有些人不知道怎么修改dmp文件,用那个办法就来的快。
比如说我之知道怎么改,我还以为改为0852呢,呵呵

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
19#
发表于 2003-4-11 13:19 | 只看该作者
是不是用EDITPLUS打开的第四行的那个四位数。可我怎么知道如何我要改成多少那?例如:

我怎么知道ZHS16GBK应为03 54 !!

使用道具 举报

回复
论坛徽章:
65
ITPUB元老
日期:2006-03-01 17:57:36马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:52
20#
发表于 2003-4-11 13:31 | 只看该作者
SQL> select nls_charset_id('zhs16gbk') from dual;

NLS_CHARSET_ID('ZHS16GBK')
--------------------------
852
然后把852换成16进制数

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表