Oracle817   版本   不同字符集之间的数据库导入

由于业务原因,需要将一英文字符集(American_America.WE8ISO8859P1)的数据库DMP文件导入到一中文字符集(SIMPLIFIED   CHINESE_CHINA.ZHS16GBK)的数据库中。由于字符集的不同,需要将中文字符集的数据库环境改变成英文字符集。遇到很多的麻烦,通过在网上查找资料,终于解决了问题。在这个过程中,发现网友们也有同样的问题,为了,让大家在以后能够顺利的完成此类工作,现将把我导入成功的过程写出来,与大家共享。

一、系统环境:

导出环境:

主机:Compaq   小型机

操作系统:Unix

数据库:oracle8.1.7{英文字符集(American_America.WE8ISO8859P1)}

导入环境:

主机:普通Pc   机

主频:PIII750

内存:192M

操作系统:Windows   2000   server

数据库:Oracle8.1.7中文字符集(SIMPLIFIED   CHINESE_CHINA.ZHS16GBK)

注:导出过程省略

二、导入过程

1、     将win2000系统中的oracle注册表

[HKEY_LOCAL_MACHINESOFTWAREORACLE]中的[NLS_LANG]键值

“SIMPLIFIED   CHINESE_CHINA.ZHS16GBK”改成

“American_America.WE8ISO8859P1”

2、     用system用户的身份,在Sql-plus   下执行以下语句:

update   sys.props$   set   value$='WE8ISO8859P1'   where   name='NLS_CHARACTERSET';

update     sys.props$   set   value$='WE8ISO8859P1'   where   name='NLS_NCHAR_CHARACTERSET';

commit;

3、     重新启动oracle

4、     开始导入数据库

userid   =   用户名/密码@连结串

buffer   =   60000

log   =   c:dmp.log

file   =   c:导入数据文件名称.dmp

fromuser   =   用户名

touser   =   用户名

这里要注意,要确保导入的表空间和用户已经建立并与导出文件一至,还要确认用户是否拥有dba的权限,否则有可能会影响导入数据的完整。

5、     检查导入效果,在目前环境下,测试数据是否正确,是否有乱码,是否有未成功导入的表和其他触发器、过程和函数等信息。确认导入没有问题后,进入到下一步。

6、     将win2000下oracle字符集环境恢复成中文字符集。

[HKEY_LOCAL_MACHINESOFTWAREORACLE]中的[NLS_LANG]键值

“American_America.WE8ISO8859P1”   改回

“SIMPLIFIED   CHINESE_CHINA.ZHS16GBK”

7、     用system用户的身份,在Sql-plus   下执行以下语句:

update   sys.props$   set   value$='   ZHS16GBK   '   where   name='NLS_CHARACTERSET';

update     sys.props$   set   value$='   ZHS16GBK   '   where   name='NLS_NCHAR_CHARACTERSET';

commit;

8、     重新启动数据库。

检查你的数据库中的数据,如果没有乱码,而且你的程序能够在这个环境下正常运行,那么恭喜你,你也成功了!!

Top

2 楼wylwyl1130(落雪山林)回复于 2004-09-08 16:28:35 得分 5

给你一个例子,修改一下字符集就可以了

用编辑方式打开导出的dmp文件,获取2、3字节的内容,如00   01,

先把它转换为10进制数,为1,使用函数NLS_CHARSET_NAME即可获得该字符集:

SQL>   select   nls_charset_name(1)   from   dual;

NLS_CHARSET_NAME(1)

-------------------

US7ASCII

可以知道该dmp文件的字符集为US7ASCII,

如果需要把该dmp文件的字符集换成ZHS16GBK,

则需要用NLS_CHARSET_ID获取该字符集的编号:

SQL>   select   nls_charset_id('zhs16gbk')   from   dual;

NLS_CHARSET_ID('ZHS16GBK')

--------------------------

852

把852换成16进制数,为354,把2、3字节的00   01换成03   54,

即完成了把该dmp文件字符集从us7ascii到zhs16gbk的转化,

这样,再把该dmp文件导入到zhs16gbk字符集的数据库就可以了。Top

3 楼zhihaitao(云-松-)回复于 2004-09-08 17:03:19 得分 5

好好学习,天天向上Top

4 楼daydayupliq(敞开胸怀!)回复于 2004-09-08 17:10:15 得分 5

from   csdn.net

使用一点点技巧,就可以使导出/导入在不同的字符集的数据库上转换数据。这里需要一个2进制文件编辑工具即可,如uedit32。用编辑方式打开导出的dmp文件,获取2、3字节的内容,如00   01,先把它转换为10进制数,为1,使用函数NLS_CHARSET_NAME即可获得该字符集:(ultraedit   打开几百M到上G的文件很慢,我试了winHex,哪个速度啊,闪电!)

SQL>   select   nls_charset_name(1)   from   dual;

NLS_CHARSET_NAME(1)

-------------------

US7ASCII

可以知道该dmp文件的字符集为US7ASCII,如果需要把该dmp文件的字符集换成ZHS16GBK,则需要用NLS_CHARSET_ID获取该字符集的编号:

SQL>   select   nls_charset_id('zhs16gbk')   from   dual;

NLS_CHARSET_ID('ZHS16GBK')

--------------------------

852

把852换成16进制数,为354,把2、3字节的00   01换成03   54,即完成了把该dmp文件字符集从us7ascii到zhs16gbk的转化,这样,再把该dmp文件导入到zhs16gbk字符集的数据库就可以了。(注意,十进制数与十六进制之间的转换,想明白其中的道理)

SQL>   select   nls_charset_id('zhs16cgb231280')   from   dual;

NLS_CHARSET_ID('ZHS16CGB231280')

--------------------------------

850

字符集                         代码(十进制)       对应的dmp文件(2、3字节/二进制)

ZHS16CGB231280         850                             03   52

ZHS16GBK                     852                             03   54

以前一直用oracle8.0.5     ,     安装好     oracle8.1.6         后发现SQL*Plus可以用,SQL*WorkSheet     总出现乱码,改了字符集也不对

---------------------------------------------------------------

解决办法:

在$ORACLE_HOMEsysmanconfig目录下有一个配置文件名为dbappscfg.properties,找到这样一项,#SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1

去掉注释符#,同时将其修改为SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

对于Windows操作系统,还需要修改一项,在文件中找到#     SQLPLUS_SYSTEMROOT=c:\WINNT40,去掉注释符,将其修改为你所在机器的操作系统主目录。如操作系统的主目录在D盘的Winnt下,则将其修改为     SQLPLUS_SYSTEMROOT=d:\WINNT。

修改完成后,保存文件,退出编辑。重新连接SQL     PLUS     Worksheet,OK!

---------------------------------------------------------------

对于Oracle     Enterprise     Manager中的所有工具,有一个配置文件名为dbappscfg.properties,修改该文件即可解决上述问题。这个文件的位置在$ORACLE_HOMEsysmanconfig目录下,用任何的文本编辑器打开该文件,在这个文件里面,找到这样一项,

#     SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1

去掉注释符#,同时将其修改为SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK。

对于Windows操作系统,还需要修改一项,在文件中找到#     SQLPLUS_SYSTEMROOT=c:\WINNT40,去掉注释符,将其修改为你所在机器的操作系统主目录。如操作系统的主目录在D盘的Winnt下,则将其修改为     SQLPLUS_SYSTEMROOT=d:\WINNT。

对于后面一项的修改只对Windows操作系统进行,对UNIX操作系统则不需要。如果在Windows操作系统中不修改该项,在Oracle     Enterprise     Manager中,连接系统时,会提示如下的错误:

ORA-12560     TNS:protocol     adapter     error

或者

ORA-12545     Connect     failed     because     target     host     or     object     does     not     exist

修改完成后,保存文件,退出编辑。重新连接SQL     PLUS     Worksheet,字符集乱码问题得到解决,显示正确的简体中文字符集。

Top

5 楼LGQDUCKY(飘)回复于 2004-09-08 18:15:16 得分 5

修改下目的(ORACLE9)的数据库字符级,就能导入

sqlplus   /nolog

sql>conn     /as   sysdba

sql>update   sys.props$   set   value$='ZHS16GBK'   where   name='NLS_CHARACTERSET';

sql>update     sys.props$   set   value$='   ZHS16GBK   '   where   name='NLS_NCHAR_CHARACTERSET';

sql>commit;

重新启动数据库,然后执行IMPTop

6 楼zwj0712(阿张)回复于 2004-09-08 18:49:42 得分 5

还是楼上的强啊!!!Top

7 楼godblessu(上帝保佑)回复于 2004-09-09 09:04:17 得分 0

大侠们   且慢且慢

我导进去了   只是有些记录的某些字段超长了

所以想知道两个字符集是怎么算字符长度的

谢谢Top

8 楼LGQDUCKY(飘)回复于 2004-09-09 09:11:07 得分 20

英文字符级一个中文算一个字节,中文字符级中文算两个字节Top

9 楼godblessu(上帝保佑)回复于 2004-09-09 09:14:05 得分 0

那样的话   我将中文字符集的dmp导入到utf8的数据库中   怎么会说超长呢?Top

10 楼lq1600k(打印机)回复于 2004-09-10 15:58:09 得分 50

utf8一个汉字3bytes   utf16一个汉字4bytes

==============================

UTF8   characters   occupy   up   to   3   bytes.   AL32UTF8   (Oracle9i   only)   characters   occupy   up   to   4   bytes.

4   bytes   are   only   for   characters   allocated   in   Unicode   3.1,   not   yet   supported   by   Oracle,   and   user-defined   characters   from   Private   Use   area   above   U+0000FFFF.   Four   bytes   they   are   not   yet   practically   used.

Chinese   and   Japanese   characters   occupy   3   bytes   in   UTF8.   Due   to   Han   unification   in   Unicode   there   is   no   distinction   between   Chinese   and   Japanese   ideographs,   if   they   are   the   same   character   (like   the   Chinese   character   for   "center",   appearing   in   the   word   "China",   and   used   in   Japanese   as   well).   You   have   to   distinguish   between   languages   on   the   application   level   (e.g.   extra   column).

oracle817字符集,Oracle817 版本 不同字符集之间的数据库导入相关推荐

  1. oracle817字符集,Oracle817 版本 不同字符集之间的数据库导入 (转)

    Oracle817 版本 不同字符集之间的数据库导入 (转)[@more@] 817 版本 不同字符集之间的导入 :namespace prefix = o ns = "urn:schema ...

  2. MySQL 不同版本默认字符集

    MySQL 不同版本默认字符集 一.MySQL 5.6默认字符集 备注:默认是utf8,支持utf8mb4. 二.MySQL 5.7默认字符集 备注:默认同样是utf8,到这个版本后生产环境我们会用u ...

  3. ZHS16GBK的数据库导入到字符集为AL32UTF8的数据库

    字符集为ZHS16GBK的数据库导入到字符集为AL32UTF8的数据库  相信大家都对字符集有相当的了解了,废话就不多说了!直接步入正题:这里主要是测试含有 汉字的数据从ZHS16GBK的数据库导入到 ...

  4. php与mysql字符集,php与mysql字符集编码问题

    Mysql自4.1以后,增加了对字符集的支持.笔者之前对Mysql比较了解,刚接触4.1时,感觉Mysql有点多此一举,但后来细想发现,对字符集的支持,虽然对开发者来说,会麻烦一些,但不可否认,是一种 ...

  5. xp mysql字符集与乱码_mysql字符集(GBK、GB2312、UTF8)与中文乱码的原因及解决

    Mysql乱码问题的原因与解决 MySQL对中文的支持程度还是很有限的,尤其是新手,一旦出现乱码问题,就会头大.下面介绍几种乱码问题的现象原因及解决方法,仅供参考. 乱码问题1:用PHPmyAdmin ...

  6. Oracle imp字符集转换,imp/exp 字符集转换

    明白ORACLE的多国语言设置,ORACLE多国语言设置是为了支持世界范围的语言与字符集,一般对语言提示,货币形式,排序方式和CHAR,VARCHAR2,CLOB,LONG字段的数据的显示等有效.OR ...

  7. mysql数据库字符集设置_查看和设置MySQL数据库字符集

    查看和设置MySQL数据库字符集作者:scorpio 2008-01-21 10:05:17 标签: 杂谈 Liunx下修改MySQL字符集:1.查找MySQL的cnf文件的位置find / -ina ...

  8. (转载)查看Oracle字符集及怎样修改字符集

    一.什么是oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系.ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据.它使数据库 ...

  9. Oracle字符集AL32UTF8 改ZHS16GBK字符集

    数据导入数据突然发现大量报错,字段长度不够 ORA-02374: conversion error loading table "ECM"."C_CAR_CARD&quo ...

最新文章

  1. 数字图像处理:(5)非微分算子在数字图像处理中的应用
  2. eclipse安装maven
  3. Mysql 去除 特定字符后面的所有字符串
  4. Activity后台运行一段时间回来crash问题的分析与解决
  5. ajax 获取JSON
  6. 已有项目要不要迁移到Addressable系统?
  7. 详解iPhone Tableview分批显示数据
  8. Objective-C入门教程(摘录)
  9. ReentrantLock中的公平锁与非公平锁
  10. Prim POJ 2031 Building a Space Station
  11. CNware存储管理功能介绍
  12. 【java毕业设计】基于javaEE+Mybatis的WEB仓库管理系统设计与实现(毕业论文+程序源码)——仓库管理系统
  13. DirectX终极游戏开发指南引擎源码分析
  14. latex 去掉(不显示)空白页的页码与页眉
  15. 【微信防封域名】【微信不死域名】【微信域名白名单】
  16. 20+案例教你可视化图表的设计方法
  17. C语言实现反汇编【微机原理】
  18. 一阶贝塞尔函数matlab,一阶贝塞尔函数
  19. 当 Python 遇到数据库,这个模块就变得超级好用
  20. c++ MFC 画笔画一个圆形

热门文章

  1. 如何一键重装Win11系统 一键重装系统方法
  2. 小程序的授权和获取userInfo
  3. iOS 9官方文档(翻译)
  4. 利用百度云m3u8格式hls直播实例
  5. rac rman备份和恢复
  6. 十二款硬盘数据恢复软件!恢复数据,最适合你的是这一款
  7. WinCE手写输入法
  8. 基于sklearn的朴素贝叶斯_sklearn 朴素贝叶斯
  9. 【附源码】计算机毕业设计SSM闲置物品交易平台
  10. 电脑关闭打印机与无线服务器,电脑怎么设置wifi连接打印机