不得不说,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
里面用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
字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。
感觉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,但改得太多,
不知道是哪个生效的,后来系统还原了就再也不能重现了
谢谢回复,不过我问的不是这个啊。客户端的字符集要求与服务器一致,这个我知道,不过我上面说了,现在并不是要正确显示数据库中的汉字的问题,而只是要显示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一登录进行就显示一些乱码,其实就是日期的汉字显示。
这个还没有涉及到数据库的字符集
客户端的字符集要求与服务器一致
我还以为是和数据库编码一致
结果是和操作系统一致抄一下:
总结起来也很简单,要想在字符集方面少些错误与麻烦,需要坚持两条基本原则:
在数据库端:选择需要的字符集(通过create database中的CHARACTER SET与NATIONAL CHARACTER SET子句指定);
在客户端:设置操作系统实际使用的字符集(通过环境变量NLS_LANG设置)。那个NATIONAL CHARACTER SET好像一般都是utf16.没必要也改成utf8吧?安装时也没有选项可以设置国家字符集,只能安装后自己更改。
这个肯定不行。很多终端不支持UTF-8的显示,
改成LANG=zh_CN.GBK
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 - 百度快照虽然不是需要的,也不想等了。等下就结贴了
呵呵,你没看清楚吧。我是问的 Linux上的终端。 那个本来就是UTF8的
LANG=zh_CN.UTF-8这个没问题的
上面说了,用过很多工具,telnet,putty,secure ssh client等。都没问题
后来问的是 直接本地登录linux并使用上面的Console终端
我说了,这是一个中文Linux,本身系统菜单这些都是中文的
看来是理解错了。一直都只是看到在说
客户端字符集要和服务端一致,
但没有很好的理解。
现在总算是多些理解了其实就是一点小误会而已,以前一直以为“客户端字符集要和服务端一致”指的是 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
这下可能清楚一些了
你把编码格式设置成简体中文就可以了
有试过改/etc/sysconfig/i18n成GBK的,结果Linux系统就进不了桌面了,非常诡异。算了还是就用UTF8了
我在公司,没有办法上传图片,你自己在你的终端上面的菜单栏里找一下
英文是 Encoding 的设置(中文就是编码,类似于 IE 的编码格式设置)有试过改/etc/sysconfig/i18n成GBK的,结果Linux系统就进不了桌面了,非常诡异。算了还是就用UTF8了
[/Quote]
看到这个设置了。确实可行。但是这个可以固定吗?就是说固定成默认成GBK?
不然每次改一下?
没找到设置默认字符集的。
默认是系统那个i18n设置吧?那个改起就太麻烦了
依然会是SIMPLIFIED CHINESE_CHINA.ZHS16GBK,这样,消息也是中文的,数据库里面的中文也不会乱码,在各种连接方式下也都可以完美的显示或插入中文,完全解决了
我是根据 export "NLS_LANG=SIMPLIFIED CHINESE_CHINA.al32utf8"设置生效的,我在putty下,secureCRT下都是这么做的,成功了。