错误原因: 
一般,是因为字符集设置不对照成的。 
解决方法: 
1、检查服务器上Oracle数据库的字符集SQL> conn sys/change_on_install
连接成功.SQL> desc props$
 列名                          可空值否   类型
 ------------------------------- -------- ----
 NAME                            NOT NULL VARCHAR2(30)
 VALUE$                                   VARCHAR2(2000)
 COMMENT$                                 VARCHAR2(2000)SQL> col value$ format a40
SQL> select name,value$ from props$;NAME                           VALUE$
------------------------------ -------------------------
DICT.BASE                      2
NLS_LANGUAGE                   AMERICAN
NLS_TERRITORY                  AMERICA
NLS_CURRENCY                   $
NLS_ISO_CURRENCY               AMERICA
NLS_NUMERIC_CHARACTERS         .,
NLS_DATE_FORMAT                DD-MON-YY
NLS_DATE_LANGUAGE              AMERICAN
NLS_CHARACTERSET               ZHS16GBK
NLS_SORT                       BINARY
NLS_CALENDAR                   GREGORIAN
NLS_RDBMS_VERSION              7.3.4.0.0
GLOBAL_DB_NAME                 ORACLE.WORLD
EXPORT_VIEWS_VERSION           3查询到14记录.NLS_CHARACTERSET这个参数应该是ZHS16GBK,如不是,改为它。SQL*Plus中修改方法:
SQL> update props$ set value$='新字符集' where name='NLS_CHARACTERSET';操作系统中修改方法:
connect internal
alter database ORCL character set ZHS16GBK;
alter database ORCL national character set ZHS16GBK;
2、检查操作系统级Oracle汉字显示的字符集运行regedit,定位到:
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE找到以下字符串
NLS_LANG检查是否以下内容,如不是,改之
SIMPLIFIED CHINESE_CHINA.ZHS16GBK

解决方案 »

  1.   

    续 tangxiaosan001>通常来说,ORACLE SERVER的字符与你的操作系统没多大关系,只要将客户端与服务端的字符集设成一样的就行.
    >假设你的客户端是WINDOWS的运行regedit,定位到:
    HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE找到以下字符串
    NLS_LANG>检查是和服务器一致,如不是,改之
    >注意 ,通常有多个NLS_LANG,设为一样的>在服务器端则没关系,你insert一条有中文的记录,再select出来,结果是一样的,不会出乱码
    还有一种常用的字符集  AMERICAN_AMERICA.US7ASCII
      

  2.   

    http://www.linuxsir.org/bbs/showthread.php?s=f83886460cf1a900f7c9f65149c9e7a4&threadid=46429