SQLPLUS讨厌的字符集问题——乱码与问号

ppjava2009 2012-08-13 12:10:02
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,

各位老师看看应该怎么设置呢?
...全文
1143 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ppjava2009 2012-08-14
  • 打赏
  • 举报
回复
字符集以及字符转码比较复杂
http://space.itpub.net/519536/viewspace-626952
ljjk123 2012-08-14
  • 打赏
  • 举报
回复
字符集问题,我没有测试,不过网上有相关的有效帖子
如果你在客户端 敲cmd 然后 chcp 回车 返回 936
那么,建议你把客户端字符集改成 AMERICAN_AMERICA.ZHS16GBK
这样,可能就能解决你当前的问题。
但是,这样做,极少的冷僻字将无法正常录入。
ppjava2009 2012-08-14
  • 打赏
  • 举报
回复
不要沉啊,求各位老师指点一下。
ppjava2009 2012-08-13
  • 打赏
  • 举报
回复
使用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 - Pro

With 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 的外部函数库名
ppjava2009 2012-08-13
  • 打赏
  • 举报
回复
注册表HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1中设置NLS_LANG为SIMPLIFIED CHINESE_CHINA.ZHS16GBK,不就相当于在CMD中设置NLS_LANG中一样,只不过一个是全局的,一个是局部的的。
即相当于主题中的第二咱情况。

这样是问号。
「已注销」 2012-08-13
  • 打赏
  • 举报
回复
查看注册表项
HLM\SOFTWARE\ORACLE\KEY_OraDb10g_home1\NLS_LANG
如果为空,设置为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK

ppjava2009 2012-08-13
  • 打赏
  • 举报
回复
应该不是cmd字符集吧,我执行系统其它命令都没问题,只是执行SQLPLUS命令显示有问题。
BenChiM888 2012-08-13
  • 打赏
  • 举报
回复
这是你cmd 字符集问题吧。

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧