`
Fangrn
  • 浏览: 798245 次
  • 性别: 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数据库的字符集方法(RAC)

    修改oracle数据库的字符集方法(RAC),适用RAC

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

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

    linux 下oracle中文乱码字符集设置

    linux 下的 oracle 导入数据库时出现中文乱码,通过修改字符集格式,修改成支持中文的格式。简单易操作。

    Oracle11g 字符集 AL32UTF8 修改为ZHS16GBK

    Oracle11g 字符集 AL32UTF8 修改为ZHS16GBK .

    oracle 字符集乱码解决

    正常情况下,要将汉字存入数据库,数据库字符集必须支持中文,而将数据库字符集设置为US7ASCII等单字节字符集是不合适的。US7ASCII字符集只定义了128个符号,并不支持汉字。另外,如果在SQL*PLUS中能够输入中文,...

    查看oracle数据库的编码及修改编码格式的方法

    首先查看oracle数据库的编码 SQL> select * from nls_database_parameters where parameter ='NLS_CHARACTERSET'; PARAMETER ——————– VALUE ——————– NLS_CHARACTERSET AL32UTF8 这其来源于props$,这...

    [Oracle] 彻底搞懂Oracle字符集

    基本概念字符集(Character set):是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。...字符集的定义其实就是字符的集合,而字符编码则是指怎么将这

    oracle修改字符集

    4.修改Oracle的编码和操作系统的一样。(参考别人的) 登陆用dba SQL> conn system/hundsun as sysdba; 停掉数据库 SQL>shutdown immediate; 启动数据库到mount状态下 SQL> STARTUP MOUNT; Java代码 ...

    java连接AmericanascII7字符集oracle例子

    java连接AmericanascII7字符集oracle例子

    oracle查看字符集和修改字符集使用详解

    影响Oracle数据库字符集最重要的参数是NLS_LANG参数。它的格式如下: NLS_LANG = language_territory.charset它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。其中:Language:指定服务器消息的...

    导出/导入与字符集之间问题的解决

    ORACLE的多国语言设置最主要的 两个特性就是国家语言设置与字符集设置,国家语言设置决定了界面或提示使用的语言种类,字符集决定了数据库保存与字符集有关数据时候的编码规 则。正如刚才上面的一个小例子,环境变量...

    Oracle数据库服务器修改操作系统时间的注意事项详解

    推荐:安装oracle10g时候注意事项&修改oracle数据库字符集编码 [安装oracle10g时候注意事项:1. 关闭网络连接2.……修改oracle数据库字符集编码:先用system和密码登陆SQLPLUS,然后:1.用sys登录到oracle中 connect...

    jdbc连接数据库的乱码问题(已解决)

    jdbc连接mysql出现了乱码,总结起来就是里面的四个编码方式是一样的时候,就不会乱码了,简之,客户连接数据库返回结果(编码必须一致)。

    循序渐进Oracle:数据库的字符集和字符集文件

    导读:本文来自『墨天轮』专栏“循序渐进Oralcle”(https://www.modb.pro/topic/6289,复制到浏览器中打开或者点击“阅读原文”),介绍《循序渐进Oracle》第三章的3.1-3.4节:字符集的基本知识、数据库的字符集、...

    oracle查看字符集后修改oracle服务端和客户端字符集的步骤

    1.oracle server端字符集查询 代码如下:select userenv(’language’) from dual; server字符集修改: 将数据库启动到RESTRICTED模式下做字符集更改: 代码如下:SQL>conn /as sysdba SQL>shutdown immediate;  ...

    Oracle中如何用SQL检测字段是否包括中文字符

    有一个同事的数据迁移程序有个问题,没有考虑中文编码字符,由于迁移的表有几千万数据,但是有中文的记录集很少,问我能否找出有中文内容的记录数。首先我想到的是采用检测每个字节ASCII的方式,这样的话需要写一个...

    PLSQL字符集如何设置

    Oracle数据库安装后,PL/SQL查询出数据中英文乱码,可以通过调整环境变量等方式修改。

    linux 下修改字符集的问题

    当装完oracle11g由于当时装的匆忙发现数据库的编码不对,显示编码为AL32UTF,要想显示中文需要改成ZHS16GBK.

    mysql数据库中字符集乱码问题原因及解决

    实际上,无论何种数据库只要出现乱码问题,这大多是由于数据库字符集设定的问题。 下面我们就介绍一下,数据库的字符集的设定及乱码问题的解决。 mysql数据库的字符集 直白的说,字符就像是单个的文字,编码就像是给...

    深入Oracle字符集的查看与修改详解

    影响Oracle数据库字符集最重要的参数是NLS_LANG参数。它的格式如下: NLS_LANG = language_territory.charset 它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。其中: Language:指定服务器消息...

Global site tag (gtag.js) - Google Analytics