SQLPLUS乱码+问号
set oracle_sid=infoddc查看数据库字符集为:AL32UTF8,使用下面SQL查询:
SELECT t.lang||'_'||t.territy||'.'||t.characterset "NLS_LANG"  
  FROM (SELECT 
              (SELECT value FROM nls_database_parameters WHERE parameter='NLS_LANGUAGE') lang,
              (SELECT value FROM nls_database_parameters WHERE parameter='NLS_TERRITORY') territy ,
              (SELECT value FROM nls_database_parameters WHERE parameter='NLS_CHARACTERSET') characterset 
          FROM DUAL) t;
用户环境语言为:SIMPLIFIED CHINESE_CHINA.US7ASCII,使用下面SQL查询:
select userenv('language') from dual;1、[乱码]使用set nls_lang=SIMPLIFIED CHINESE_CHINA.AL32UTF8时,任何中文提示都是乱码
--------------
e:\540>set nls_lang=SIMPLIFIED CHINESE_CHINA.AL32UTF8
e:\540>sqlplus "/ as sysdba"
SQL*Plus: Release 10.2.0.4.0 - Production on 鏄熸湡涓€ 8鏈?13 11:55:27 2012
Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.
宸茶繛鎺ュ埌绌洪棽渚嬬▼銆
SQL> exit
宸叉柇寮€杩炴帴
--------------2、[问号]使用set nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK时,中文提示没问题,但执行结果虽是问号
--------------
e:\540>set nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
e:\540>sqlplus "/ as sysdba"
SQL*Plus: Release 10.2.0.4.0 - Production on 星期一 8月 13 11:56:22 2012
Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.
已连接到空闲例程。
SQL> startup mount pfile='INITinfoddc.ora';
ORACLE 例程已经启动。
Total System Global Area  838860800 bytes
Fixed Size                  2069392 bytes
Variable Size             213912688 bytes
Database Buffers          616562688 bytes
Redo Buffers                6316032 bytes
ORA-00205: ?????????, ??????, ???????
--------------3、[英文正常]通过查用户环境,查出字符集是US7ASCII,修改HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1下的
NLS_LANG=AMERICAN_AMERICA.US7ASCII,重新打开窗口显示正常,全英文显示,如果设置成SIMPLIFIED CHINESE_CHINA.US7ASCII,则依然中文显示成问号
--------------
SQL> select userenv('language') from dual;
SIMPLIFIED CHINESE_CHINA.US7ASCII
--------------
最后总结出来,只能使用AMERICAN_AMERICA.US7ASCII方式,使用全英文界面。
现在有一个问题是,在导出数据时,应该设置NLS_LANG为多少呢?
我觉得应该与数据库字符集一致,设置成SIMPLIFIED CHINESE_CHINA.AL32UTF8,各位老师看看应该怎么设置呢?

解决方案 »

  1.   

    使用set nls_lang=SIMPLIFIED CHINESE_CHINA.AL32UTF8,再执行导出命令exp,CMD窗口中显示成乱码,但导出日志中是正常的,Copyright (c) 1982, 2007, Oracle.  All rights reserved.
    杩炴帴鍒? Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - ProWith the Partitioning, OLAP and Data Mining options
    宸插鍑?AL32UTF8 瀛楃闆嗗拰 AL16UTF16 NCHAR 瀛楃闆鍗冲皢瀵煎嚭鎸囧畾鐨勭敤鎴?..
    . 姝e湪瀵煎嚭 pre-schema 杩囩▼瀵硅薄鍜屾搷浣
    . 姝e湪瀵煎嚭鐢ㄦ埛 INFODDCGROUP 鐨勫閮ㄥ嚱鏁板簱鍚
    连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
    With the Partitioning, OLAP and Data Mining options
    已导出 AL32UTF8 字符集和 AL16UTF16 NCHAR 字符集即将导出指定的用户...
    . 正在导出 pre-schema 过程对象和操作
    . 正在导出用户 INFODDCGROUP 的外部函数库名
      

  2.   

    这是你cmd 字符集问题吧。
      

  3.   

    应该不是cmd字符集吧,我执行系统其它命令都没问题,只是执行SQLPLUS命令显示有问题。
      

  4.   

    查看注册表项
    HLM\SOFTWARE\ORACLE\KEY_OraDb10g_home1\NLS_LANG
    如果为空,设置为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
      

  5.   

    注册表HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1中设置NLS_LANG为SIMPLIFIED CHINESE_CHINA.ZHS16GBK,不就相当于在CMD中设置NLS_LANG中一样,只不过一个是全局的,一个是局部的的。
    即相当于主题中的第二咱情况。这样是问号。
      

  6.   

    字符集问题,我没有测试,不过网上有相关的有效帖子
    如果你在客户端 敲cmd 然后 chcp 回车 返回 936
    那么,建议你把客户端字符集改成 AMERICAN_AMERICA.ZHS16GBK
    这样,可能就能解决你当前的问题。
    但是,这样做,极少的冷僻字将无法正常录入。
      

  7.   

    字符集以及字符转码比较复杂
    http://space.itpub.net/519536/viewspace-626952