SQLPLUS讨厌的字符集问题——乱码与问号
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,
各位老师看看应该怎么设置呢?