不得不说,Oracle在处理中文的时候很容易就会遇到乱码。先问个简单的,oracle那个sqlplus在linux上怎么显示中文的?装了个centos,中文的,再装了个oracle11g,然后在centos的终端console
里面用sqlplus。只是希望用sqlplus / as sysdba进行时,能看到一些汉字,
就是那些消息文字,已连接啊,多少行啊这些,如 
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
像这样。想用中文,结果始终是乱码。nls_lang设为american倒是没有乱码,就是成了英文的了。设成simplified
就会乱码,奇怪
这个应该还不涉及到数据库字符集那些高深的东西,就已经悲剧了。。
注:只有在linux那个console上不行,其他的都行,如putty,sqlplus on windows,telnet,oracle sql developer, secure ssh client,等,用这些工具一连上去,只要nls_lang设为simplified china就肯定会出现是中文的消息的。虽然平时肯定都是用远程工具登录使用的,很少会有机会用上那个Linux的本地登录后的concole,但是就是觉得有点奇怪,明明是中文的linux,桌面上一大堆的中文目录都没问题的,居然显示不了sqlplus的中文消息。
想问问看哪位知道是怎么回事?也试过改那个i18n,结果连系统都不能登录了。[oracle@testoracl ~]$ env|grep LANG
NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
LANG=zh_CN.UTF-8
[oracle@testoracl ~]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.1.0 Production on ���ڶ� 11�� 15 20:06:29 2011Copyright (c) 1982, 2009, Oracle.  All rights reserved.
���ӵ�: 
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 -SQL> select userenv('language') from dual;USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
SQL> SELECT parameter, VALUE
FROM nls_database_parameters
WHERE parameter ='NLS_CHARACTERSET';PARAMETER-----------------VALUE-------------------
NLS_CHARACTERSET            ZHS16GBK
SQL> NLS_LANG 参数组成
NLS_LANG参数由以下部分组成:
NLS_LANG=<Language>_<Territory>.<Clients Characterset>NLS_LANG各部分含义如下:
LANGUAGE指定:-Oracle消息使用的语言http://zhidao.baidu.com/question/193447142.html

解决方案 »

  1.   

    客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。   
      字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。 
      

  2.   

    没人理
    感觉Oracle有很多连接方法,要都能正常显示中文不出现乱码的话,不简单
    1 用Oracle sql developer 3.0这是官方的
    2 sqlplus Windows上的命令行终端
    3 sqlplus Linux上的命令行终端
    4 用 telnet 进行远程连接,再用sqlplus 
    5 用putty 进行SSH连接,再用sqlplus 
    6 用secure ssh client进行SSH连接,再用sqlplus 
    7 用 oracle的 ODP.net 在程序中插入、读取数据
    8 用 微软.net的system.data.oracle 在程序中插入、读取数据
    还有个什么PL/SQL Developer没试,估计也是会有麻烦的其实在网上胡乱搜索后曾经有一次在sqlplus Linux上
    的命令行终端上也显示了中文消息的,
    就是改i18n,把默认的utf8改成gb18030,但改得太多,
    不知道是哪个生效的,后来系统还原了就再也不能重现了
      

  3.   


    谢谢回复,不过我问的不是这个啊。客户端的字符集要求与服务器一致,这个我知道,不过我上面说了,现在并不是要正确显示数据库中的汉字的问题,而只是要显示sqlplus的中文消息的问题。
    你说nls_lang可以是American_America.zhs16gbk。我上面说过了:
    NLS_LANG 参数组成
    NLS_LANG参数由以下部分组成:
    NLS_LANG=<Language>_<Territory>.<Clients Characterset>NLS_LANG各部分含义如下:
    LANGUAGE指定:-Oracle消息使用的语言你这个American_America.zhs16gbk。当然是没有乱码的,只不过是英文的消息。LANGUAGE这部分指定:-Oracle消息使用的语言
    再次,不是显示数据库中的汉字的问题。目前只是想解决一下,为什么不能显示中文消息。
    像上面贴出来的一样:
    [oracle@testoracl ~]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.1.0 Production on ���ڶ� 11�� 15 20:06:29 2011一登录进行就显示一些乱码,其实就是日期的汉字显示。
    这个还没有涉及到数据库的字符集
      

  4.   


    客户端的字符集要求与服务器一致
    我还以为是和数据库编码一致
    结果是和操作系统一致抄一下:
    总结起来也很简单,要想在字符集方面少些错误与麻烦,需要坚持两条基本原则:
    在数据库端:选择需要的字符集(通过create database中的CHARACTER SET与NATIONAL CHARACTER SET子句指定);
    在客户端:设置操作系统实际使用的字符集(通过环境变量NLS_LANG设置)。那个NATIONAL CHARACTER SET好像一般都是utf16.没必要也改成utf8吧?安装时也没有选项可以设置国家字符集,只能安装后自己更改。
      

  5.   

    LANG=zh_CN.UTF-8
    这个肯定不行。很多终端不支持UTF-8的显示,
    改成LANG=zh_CN.GBK
      

  6.   

    百度了一下“linux oracle sqlplus 乱码 中文”,有好多人在问,但都没有下文,答非所问。可能都是理解错了。Linux下Oracle sqlplus中文显示乱码的问题的解决 - docin.com豆丁网
    Linux下Oracle sqlplus中文显示乱码的问题的解决 详细 转帖至 人人网 QQ空间 新浪微博 腾讯微博 开心网 飞信 分享到msn 豆瓣 顶40 踩0 收藏0 分享 加入豆...
    www.docin.com/p-58461219.html 2011-9-29 - 百度快照Linux Oracle10g sqlplus 中文提示是乱码????_百度知道
    oracle database 的NLS_CHARACTERSET是UTF8 linux系统locale命令显示LANG...可以将本地的LANG设置为C,就不是乱码了。 LANG=C...
    zhidao.baidu.com/question/193447142.html  2010-10-26sqlplus 在linux下 中文 乱码 2个回答 2009-5-19
    更多知道相关问题>>关于Oracle for Linux sqlplus的乱码问题 - Oracle - 红黑联盟
    关于Oracle for Linux sqlplus的乱码...那就把字符集改写成中文的NLS_LANG="...安装oracle数据库的经历少说有20次了,...
    www.2cto.com/database/201108/101769.html 2011-10-9 - 百度快照oracle那个sqlplus在linux上怎么显示中文的? - Oracle / 基础和...
    不得不说,Oracle在处理中文的时候很容易就会遇到乱码。先问个简单的,oracle那个sqlplus在linux上怎么显示中文的?装了个centos,中文的,再装了个oracle11g,...
    topic.csdn.net/u/20111115/20/c4fb92a4-dd6 ... 13小时前 - 百度快照Linux Oracle10g sqlplus 中文提示是乱码???? - Oracle - Chi...
    6条回复 - 发帖时间: 2009年9月21日
    我在中文linux AS4上安装的Oracle 10g R2 我的NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK 为什么我用SQ - Oracle ChinaUnix.netOracle 我在中文linux AS4上安装...
    bbs.chinaunix.net/thread-1580246-1-1.html 2011-10-27 - 百度快照虽然不是需要的,也不想等了。等下就结贴了
      

  7.   


    呵呵,你没看清楚吧。我是问的 Linux上的终端。 那个本来就是UTF8的
    LANG=zh_CN.UTF-8这个没问题的
      

  8.   

    你是用的什么工具连接到 linux 的? 这个有可能是你终端的编码设置有问题
      

  9.   

    另外,还有一个可能就是你的 Linux 系统中本身就没有安装中文字符集
      

  10.   


    上面说了,用过很多工具,telnet,putty,secure ssh client等。都没问题
    后来问的是 直接本地登录linux并使用上面的Console终端
      

  11.   


    我说了,这是一个中文Linux,本身系统菜单这些都是中文的
      

  12.   

    字符集,问题
    看来是理解错了。一直都只是看到在说
    客户端字符集要和服务端一致,
    但没有很好的理解。
    现在总算是多些理解了其实就是一点小误会而已,以前一直以为“客户端字符集要和服务端一致”指的是 nls_lang设置的最后一部分应该和数据库的字符集一致。结果就是这个误解害得我折腾了一天。
    原来除了这两个字符集,还有一个是服务器即操作系统使用的字符集。客户端应该和服务器一致才是真的。比如说,虽然数据库字符集是zhs16GBK,但是,但根据客户端的不同,nls_lang就需要分别设置为utf8或gbk
    如,在Linux本地登录使用sqlplus concole的话,应该
    export "NLS_LANG=SIMPLIFIED CHINESE_CHINA.al32utf8"
    便是如果是在windows上用telnet 或 putty或secure ssh client连接到linux再用sqlplus console的话
    应该这样:
    export "NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK"因为linux系统一般是UTF8,而windows系统一般是GBK
    这下可能清楚一些了
      

  13.   

    Linux 下的 Console 终端也是有设置编码格式的
    你把编码格式设置成简体中文就可以了
      

  14.   


    有试过改/etc/sysconfig/i18n成GBK的,结果Linux系统就进不了桌面了,非常诡异。算了还是就用UTF8了
      

  15.   

    毕竟linux上好多都是默认UTF8的,改了之后到处都会出问题
      

  16.   

    在 Console 终端上方的“设置”菜单栏里就有得设置呀
    我在公司,没有办法上传图片,你自己在你的终端上面的菜单栏里找一下
    英文是 Encoding 的设置(中文就是编码,类似于 IE 的编码格式设置)有试过改/etc/sysconfig/i18n成GBK的,结果Linux系统就进不了桌面了,非常诡异。算了还是就用UTF8了
    [/Quote]
      

  17.   


    看到这个设置了。确实可行。但是这个可以固定吗?就是说固定成默认成GBK?
    不然每次改一下?
    没找到设置默认字符集的。
    默认是系统那个i18n设置吧?那个改起就太麻烦了
      

  18.   

    好像把nls_lang设成utf8就可以了。这样进去sqlplus之后,再SELECT USERENV('language') FROM dual;
    依然会是SIMPLIFIED CHINESE_CHINA.ZHS16GBK,这样,消息也是中文的,数据库里面的中文也不会乱码,在各种连接方式下也都可以完美的显示或插入中文,完全解决了
      

  19.   

    有一个 “save as default”(保存为默认设置)的选项,你点一下就可以了
      

  20.   


    我是根据 export "NLS_LANG=SIMPLIFIED CHINESE_CHINA.al32utf8"设置生效的,我在putty下,secureCRT下都是这么做的,成功了。