客户端的字符集设置NLS_LANG=AMERICAN_AMERICA.US7ASCII。

解决方案 »

  1.   

    我是在服务器上调试代码,处理产生的XML文件,服务器上Oracle的NLS_LANG=AMERICAN_AMERICA.US7ASCII。
      

  2.   

    在SQL*Plus中insert进的都是中文的,为什么一存入服务器后,再select出的就是???了?  
    错误现象: 
    1、有的时候,服务器数据先导出,重装服务器,再导入数据,结果,发生数据查询成???。
    2、有时,服务器设置就有问题,字符集设成单字节了。 
    错误原因: 
    一般,是因为字符集设置不对照成的。 
    解决方法: 
    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
     
      

  3.   

    你的jsp,servlet端不要对接收到的字符进行任何转码,直接写到数据库中去,乱码的原因是你的jsp/servlet做了一个并不正确的转码操作。
      

  4.   

    对接收到的XML未作任何字符转换,后台显示读到的XML中文字符正常,但插入到数据库后乱码。
    如果转码,
    OrderDetailID = new String(OrderDetailID.getBytes("ISO8859_1"), "UTF8");
    OrderDetailID = new String(OrderDetailID.getBytes("GB2312"),"ISO8859_1");
    显示也是乱码,插入到数据库仍为乱码。
    但两种乱码看起来不同。前者向日文,后者是?????
    数据库的NLS_LANG=AMERICAN_AMERICA.US7ASCII
    运行SQL> col value$ format a40
    SQL> select name,value$ from props$;
    结果
    NLS_CHARACTERSET是US7ASCII 
    NLS_LANGUAGE是AMERICAN 
    NLS_NCHAR_CHARACTERSET是US7ASCII