`

Oracle 客户端plsql developer和服务器编码不同的解决办法

 
阅读更多

解决: 
打开运行器进入注册表编辑 
运行--》regedit 
找到 
HKEY_LOCAL_MACHINE\  SOFTWARE\ ORACLE\KEY_OraDb10g_home1 的变量NLS_LANG的值 
SIMPLIFIED CHINESE_CHINA.ZHS16GBK  
改变成以下的值 
SIMPLIFIED CHINESE_CHINA.AL32UTF8(服务端编码) 

 

 

要用一个有权限的用户进行以下操作

说明:
EXP-00091: 出口可疑的统计。
EXP-00091: Exporting questionable statistics.

产生:
在数据库的服务器端和客户端字符集不同的情况 下,导出(dump)数据库表时,会产生这个错误。虽然产生这个错误,但好像对导入没有影响。

解决:

服务器端数据的字符集查看方法:
1、打开SQLPLUS,用sys用户登录。
2、执行

SELECT * FROM V$NLS_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET'

 
其中'NLS_CHARACTERSET'必须为大写。

PARAMETER
--------------------
VALUE
--------------------
NLS_CHARACTERSET
ZHS16GBK

 

解决方法:

     一、linux环境

    在oracle用户的.bash_profile文件加入

export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

   二、windows环境 

    1、打开注册 表,依次进入HKEY_LOCAL_MACHINE→SOFTWARE→ORACLE→HOME0目录。
    2、察看NLS_LANG的值。
    3、将其修改为数据库服务器端字符集相同的字符或临时设定环境变量

set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK 

 
     本方法适用于Oracle9i, 10g以及XE. 在10.2.0.1.0下测试无错. 需要注意的是, 使用此方法会破坏数据库中的原有双字节字符. 一种办法是先将数据库导出, 修改完字符集后再导入; 另一种办法就是不管他, 就那样使用. 一般如果是一个测试环境, 像方法二那样就可以了, 但是可能某些表无法读取, 需要注意.

 
sql> shutdown immediate
sql> startup mount
sql> alter system enable restricted session;
sql> alter system set job_queue_processes=0;
sql> alter system set aq_tm_processes=0;
sql> alter database open;
sql> alter database character set <internal_use> AL32UTF8;
sql> shutdown immediate
sql> startup
 
这里的INTERNAL_USE可选,譬如用于不能从父集转到子集的场合,但是这样做会产生乱码,或者表中的数据不能读取。
 
如果数据库中存在CLOB字段,那么就不允许对字符集进行转换,此时可以查看alert<sid>.log文件,把含有CLOB的表trancate.
 
sql> trancate table [table_name];
 
转换后的数据库字符集可以通过以下命令察看.
 
sql> select name, value$ from props$ where name like '%NLS%';
 
导入导出是我们常用的一个数据迁移及转化工具,因其导出文件具有平台无关性,所以在跨平台迁移中,最为常用。

在导出操作时,非常重要的是客户端的字符集设置,也就是客户端的NLS_LANG设置。
 
NLS_LANG参数由以下部分组成:
 
NLS_LANG=<Language>_<Territory>.<Clients Characterset>
 
NLS_LANG各部分含义如下:
    Language
        -Oracle消息使用的语言 
        -日期中月份和日显示
    Territory 
        -货币和数字格式 
        -地区和计算星期及日期的习惯
    Clients Characterset 
        -控制客户端应用程序使用的字符集
 
例如
 
E:\>set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
E:\>sqlplus "/ as sysdba"
 
或者
 
E:\>set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
E:\>sqlplus "/ as sysdba"
 
Windows客户端设置,可以在注册表中更改NLS_LANG,具体键值位于:
 
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\
 
xx指存在多个ORACLE_HOME时系统编号。
分享到:
评论
1 楼 chenxi_sh 2014-05-05  
good,解决了问题

相关推荐

Global site tag (gtag.js) - Google Analytics