我的开发机器是XP系统,装的ORACLE是默认的字符集,通过Select value$ From props$ Where Name='NLS_CHARACTERSET'出来结果是ZHS16GBK我IMP到LINUX机器后,这台LINUX的ORACLE当初安装也是默认的字符集,发现IMP后的中文都是乱码了
我通过WEB页面INSERT几条记录,都是乱码
通过Select value$ From props$ Where Name='NLS_CHARACTERSET'出来结果是ZHS16GBK我就奇怪了
两台机器都是ZHS16GBK
为什么会出现这种情况?

解决方案 »

  1.   

    你是LINUX查询时看到的乱码吗?
    在LINUX上修改你登陆账号的nls_lang环境变量
      

  2.   

    在/oracle/下修改bash_profile的nls_lang吗?
      

  3.   

    恩。可能没有,就新建这个变量。
    这个变量中的字符集部分改成你的ZHS16GBK看看。
      

  4.   

    bash_profile中加一行:export nls_lang="SIMPLIFIED CHINESE_CHINA".ZHS16GBK保存之后注意让这个新配置生效。
      

  5.   

    应该是:
    export NLS_LANG=忘了LINUX区分大小写
      

  6.   

    我添加了export NLS_LANG="SIMPLIFIED CHINESE_CHINA".ZHS16GBK 后
    su - oracle后出现-bash: CHINESE_CHINA.ZHS16GBK: command not found
    这个倒没什么关系我在SQLPLUS里直接INSERT一个中文,出来都是乱码,所有中文都是?怎么解决啊?
      

  7.   

    这个bash到底怎么写啊?
    有的写成
    NLS_LANG="Simplified Chinese_China.ZHS16GBK"
    有的写成
    nls_lang="SIMPLIFIED CHINESE_CHINA".ZHS16GBK 
      

  8.   

    是不是linux没有装中文字符集啊.
    如果装了,就是用户的LANG变量没有设置对.
    查看是否安装了中文字符集: locale -a
    修改用户环境变量的方法: export LANG= 上面命令显示的中文字符集的一条ps:建议你不要使用linux的sqlplus插入中文,通过window的sqlplus连上linux的库,一样可以啊.
    最好使用个工具,比如toad,pl/sql developer都很好.
      

  9.   

    locale -a 
    zh_CN
    zh_CN.gb18030
    zh_CN.gb2312
    zh_CN.gbk
    zh_CN.utf8
    zh_HK
    zh_HK.big5hkscs
    zh_HK.utf8
      

  10.   


    怎么会这样?就算把nls_lang变量的值设置错误,那也只是登陆sqlplus会报错。但su - oracle不应该出错啊、
      

  11.   

    locale -a 
    zh_CN 
    zh_CN.gb18030 
    zh_CN.gb2312 
    zh_CN.gbk 
    zh_CN.utf8 
    zh_HK 
    zh_HK.big5hkscs 
    zh_HK.utf8
    有该有的中文字符集吗?
      

  12.   


    看看我的解决过程:
    SQL> select unitname from xx where rownum<10;UNITNAME
    --------------------------------------------------------------------------------
    澶у鎴烽儴(浜烘皯甯?
    娴烽€氳瘉鍒搁瀺灞变簩閬撹钀ヤ笟閮?娓竵)
    娴烽€氳瘉鍒搁瀺灞变簩閬撹钀ヤ笟閮?缇庡厓)
    娴烽€氳瘉鍒搁瀺灞变簩閬撹钀ヤ笟閮?浜烘皯甯?
    娴烽€氳瘉鍒歌殞鍩犱腑鑽h钀ヤ笟閮?娓竵)
    娴烽€氳瘉鍒歌殞鍩犱腑鑽h钀ヤ笟閮?缇庡厓)
    娴烽€氳瘉鍒歌殞鍩犱腑鑽h钀ヤ笟閮?浜烘皯甯?
    娴烽€氳瘉鍒稿寳浜厜鍗庤矾钀ヤ笟閮?娓竵)
    娴烽€氳瘉鍒稿寳浜厜鍗庤矾钀ヤ笟閮?缇庡厓)9 rows selected.SQL> exit
    Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options
    [oracle@insurance ~]$ ls
    CACHE  Desktop  mykill  README.TXT  sqlnet.log
    [oracle@insurance ~]$ echo $NLS_LANG
    AMERICAN_AMERICA.UTF8
    [oracle@insurance ~]$ sqlplus /nolog  SQL*Plus: Release 10.2.0.1.0 - Production on Fri Aug 1 16:43:56 2008Copyright (c) 1982, 2005, Oracle.  All rights reserved.SQL> conn / as sysdba
    Connected.
    SQL> Select value$ From props$ Where Name='NLS_CHARACTERSET';VALUE$
    --------------------------------------------------------------------------------
    ZHS16GBKSQL> exit
    Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options
    [oracle@insurance ~]$ echo $NLS_LANG
    AMERICAN_AMERICA.UTF8
    [oracle@insurance ~]$ export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
    [oracle@insurance ~]$ sqlplus /nologSQL*Plus: Release 10.2.0.1.0 - Production on Fri Aug 1 16:46:10 2008Copyright (c) 1982, 2005, Oracle.  All rights reserved.SQL> conn / as sysdba
    Connected.
    SQL> select unitname from SEC_HTZQ35.bd_corp where rownum<10;UNITNAME
    --------------------------------------------------------------------------------
    大客户部(人民币)
    海通证券鞍山二道街营业部(港币)
    海通证券鞍山二道街营业部(美元)
    海通证券鞍山二道街营业部(人民币)
    海通证券蚌埠中荣街营业部(港币)
    海通证券蚌埠中荣街营业部(美元)
    海通证券蚌埠中荣街营业部(人民币)
    海通证券北京光华路营业部(港币)
    海通证券北京光华路营业部(美元)9 rows selected.SQL> 
      

  13.   

    是不是linux没有装中文字符集啊. 
    如果装了,就是用户的LANG变量没有设置对. 
    查看是否安装了中文字符集: locale -a 
    修改用户环境变量的方法: export LANG= 上面命令显示的中文字符集的一条 
      

  14.   

    我忘了说了
    我的linux是red hat enterprise 4的英文版
    安装时本来可以选择中文版的
    但是我想安装成英文的
    然后安装oracle时默认的安装,没选字符集现在可以改变成ZHS16GBK吗?