`
Fangrn
  • 浏览: 820823 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle数据库字符集编码问题

阅读更多

1,查询数据库服务器字符集,其来源于props$,是表示数据库的字符集

select * from nls_database_parameters;

 2,客户端字符集环境select   *   from   nls_instance_parameter,其来源于v$parameter,表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表

3,会话字符集环境   select   *   from   nls_session_parameter,其来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter   session完成,如果会话没有特殊的设置,将与nls_instance_parameter一致。

 

客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。如果多个设置存在的时候,alter   session>环境变量>注册表>参数文件    
      字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。

 

 

4,修改数据库字符集

1、NLS_LANG参数的修改方法:
1)用SYS用户名登陆ORACLE。
2)查看字符集内容
SQL>SELECT * FROM PROPS$;
3)修改相应的字符子集
SQL>UPDATE PROPS$ SET VALUE$=’SIMPLIFIED CHINESE ‘
WHERE NAME=’NLS_LANGUAGE’;
4) 递交COMMIT;

 

Oracle10G可以采用下面的方法

connect system as sysdba ;
shutdown immediate ;
startup mount ;
alter system enable restricted session ; 
alter system set JOB_QUEUE_PROCESSES=0; 
alter system set AQ_TM_PROCESSES=0; 
alter database open ; 
alter database character set internal_use ZHS16GBK ; 
shutdown immediate ;
startup ;

 老版本可以参考

STARTUP MOUNT; 
ALTER SYSTEM ENABLE RESTRICTED SESSION; 
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; 
ALTER SYSTEM SET AQ_TM_PROCESSES=0; 
ALTER DATABASE OPEN; 
ALTER DATABASE CHARACTER SET ZHS16GBK; 
ALTER DATABASE national CHARACTER SET ZHS16GBK; 
SHUTDOWN IMMEDIATE; 
STARTUP;

 

下面提供三种解决方法:
(1) 服务器端重新安装ORACLE
在重新安装ORACLE 时选择与原卸出数据一致的字符集(本例为 US7ASCII)。
加载原卸出的数据。
 这种情况仅仅使用于空库和具有同一种字符集的数据。
(2)强行修改服务器端ORACLE当前字符集
 在用imp命令加载数据前,先在客户端用sql*plus登录system DBA用户,执行下列SQL语句进行当前ORACLE数据库字符集修改:
SQL > create database character set US7ASCII
* create database character set US7ASCII
ERROR at line 1:
ORA-01031: insufficient privileges
你会发现语句执行过程中,出现上述错误提示信息,此时不用理会,实际上
ORACLE数据库的字符集已被强行修改为US7ASCII,接着用imp命令装载数据。等数
据装载完成以后,shutdown 数据库,再startup 数据库,用合法用户登录ORACLE
数据库,在sql>命令提示符下,运行select * from V$NLS_PARAMETERS,可以看
到ORACLE数据库字符集已复原,这时再查看有汉字字符数据的表时,汉字已能被正
确显示。
(3)利用数据格式转储,避开字符集限制
这种方法主要用于加载外来ORACLE数据库的不同字符集数据。其方法如下:
先将数据加载到具有相同字符集的服务器上,然后用转换工具卸出为
foxbase 格式或access格式数据库,再用转换工具转入到不同字符集的ORACLE数
据库中,这样就避免了ORACLE字符集的困扰。目前数据库格式转换的工具很多,象
power builder5.0以上版本提供的pipeline,Microsoft Access数据库提供的数
据导入/导出功能 等。转换方法参见有关资料说明。

 

还有一个方法,没有试验过,仅供参考:

修改oracle数据库导出的dmp的字符集
我们修改数据库字符集的时候可以通过exp导出数据库后通过修改dmp文件来实现
具体步骤如下:
1、使用ue打开dmp文件取得第2、3字节的内容,如 00 01,转换成十进制为1
2、查看导出的dmp的字符集
select nls_charset_name(1) from dual;
SQL> select nls_charset_name(1) from dual;
NLS_CHARSET_NAME(1)
-------------------
US7ASCII

3、查看需要转换的字符集对应的id
select nls_charset_id('zhs16gbk') from dual;
SQL> select nls_charset_id('zhs16gbk') from dual;
NLS_CHARSET_ID('ZHS16GBK')
--------------------------
                       852
4、将查询出的字符集id值转换成16进制数,852转换成16进制为 03 45
将dmp文件中的第2、3字节的内容 00 01替换成 03 45
即完成字符集由US7ASCII转换成ZHS16GBK
 
分享到:
评论

相关推荐

    Oracle数据库字符集问题解析.pdf

    "Oracle数据库字符集问题解析" Oracle 数据库字符集问题解析是 Oracle 数据库管理系统中一个非常重要的问题。字符集是创建数据库时设定的,在创建后通常不能更改。因此,字符集的设定是个非常关键的问 题,如果...

    oracle数据库字符集 无法修改数据库字符集 乱码

    Oracle数据库字符集是指用于表示数据库中所有字符数据的编码方式。它定义了如何将字符映射到二进制数据,从而确保数据在存储和处理过程中的正确性和一致性。Oracle数据库支持多种字符集,包括单字节字符集(如ASCII...

    对Oracle数据库字符集若干问题的探讨.pdf

    Oracle数据库字符集是数据库系统中一个非常重要的概念,它决定了数据如何被编码和解码,影响着数据库中存储和检索的文本数据的正确性。在Oracle数据库中,字符集分为数据库字符集(Database Character Set)和国家...

    oracle数据库的字符集

    虽然Unicode能够表示更多的字符,但由于多字节存储的特性,会占用更多的存储空间和网络带宽,因此在选择数据库字符集时仍需谨慎。 #### 五、数据库字符集的选择 在创建Oracle数据库时,可以指定两种字符集: 1. *...

    字符集不同的Oracle数据库间交换数据的解决方法.pdf

    由于各种原因,HIS与医保采用的Oracle数据库字符集不同,从而使得数据库间的数据交换遇到很大的困难。医院HIS数据库采用的字符集为US7ASCII,而医保软件采用的字符集是ZHS16GBK。这两种字符集的不同,使得数据库间的...

    Oracle数据库字符集问题分析及解决方法 (1).pdf

    Oracle数据库字符集问题分析及解决方法主要关注的是在数据库操作,特别是数据迁移过程中可能出现的字符编码不兼容问题。字符集是数据库系统中用于表示和存储文本数据的关键组成部分,不同的字符集支持不同的语言和...

    理解ORACLE数据库字符集

    【Oracle数据库字符集详解】 Oracle数据库字符集是其全球化支持(Globalization Support)的一部分,旨在为用户提供本地化的数据存储和处理环境。字符集是字符编码的集合,它为每个特定的符号分配一个唯一的数值...

    Oracle数据库字符集问题的研究.pdf

    Oracle数据库字符集问题主要涉及到数据库内部和客户端之间的字符编码匹配问题,这直接影响到包含中文字符的数据能否正确显示和处理。字符集的选择和配置是Oracle数据库管理和维护中的关键环节,尤其对于处理多语言...

    oracle英文字符集插入到中文字符集

    Oracle数据库系统支持多种字符集,字符集决定了数据库如何存储和显示字符。英文字符集通常包括ASCII或ISO-8859-1,而中文字符集如GBK、GB2312或UTF-8则能处理中文字符。当一个使用英文字符集的应用程序尝试与使用...

    Oracle数据库字符集问题总结

    Oracle数据库字符集问题总结主要关注的是在数据迁移和交互时由于字符集差异导致的问题。字符集是决定数据库如何解释和存储字符的规则集合,对于Oracle数据库来说,它直接影响到数据的正确性和兼容性。 首先,Oracle...

    Oracle数据库字符集问题及其解决方法.pdf

    1. **数据库字符集与客户端字符集不一致**:Oracle数据库系统分为服务器端和客户端。服务器端的字符集决定了数据库中数据的存储格式,而客户端的字符集则影响数据在应用程序中的显示。当两者不匹配时,可能会出现...

    理解Oracle数据库字符集

    Oracle数据库字符集是其全球化支持(Globalization Support)的核心组成部分,也称为国家语言支持(NLS),目的是为了适应不同国家和地区用户的语言环境,包括日期、数字格式和特殊字符的存储和处理。Oracle提供了...

    Oracle 修改字符集

    ### Oracle 修改字符集 在Oracle数据库管理中,有时我们需要更改...通过以上步骤,我们可以安全地完成Oracle数据库字符集的修改。这不仅可以提高数据库的兼容性和性能,还可以帮助解决由字符集不匹配引起的各种问题。

    Oracle数据库字符集转换规律全面剖析

    Oracle数据库字符集转换规律全面剖析是一项关键的议题,尤其对于数据迁移、备份和恢复操作而言。Oracle数据库的字符集决定了如何存储和显示字符,不同字符集间的转换可能导致数据丢失或错误显示。在Export和Import...

    Oracle字符集转换

    例如,在中文环境下,如果数据库字符集设置为WE8ISO8859P1,那么在存储中文数据时就会出现问题。本文将详细介绍如何通过Oracle提供的工具进行字符集转换,避免因字符集问题导致的数据丢失或显示异常。 #### 二、...

    ORACLE数据库字符集[参考].pdf

    Oracle数据库字符集是Oracle全球化支持的核心组成部分,它允许数据库系统以用户本地的语言和格式存储、处理和检索数据。Oracle提供了广泛的语言和字符集支持,从早期的Oracle8i的48种语言和229种字符集,到Oracle9i...

    Oracle 数据库多语言入库问题的解决方案

    Oracle 数据库多语言入库问题的解决方案是针对企业在国际化进程中遇到的多国语言信息存储难题,尤其是在使用Oracle数据库时,由于字符集的不兼容性导致非中文语言数据入库时出现乱码。Oracle数据库作为全球广泛使用...

Global site tag (gtag.js) - Google Analytics