您的位置:首页 > 数据库 > Oracle

linux系统下oracle字符乱码问题

2013-10-11 10:20 211 查看
linux系统按下默认安装中文的话,并且oracle安装兼容中文安装且字符集为GBK的情况下,日志或错误显示的时候会出现乱码情况。这是由于和系统默认字符集不兼容情况照成的。

命令行下输入locale命令可以获得当前系统字符集,如图




locale把按照所涉及到的文化传统的各个方面分成12个大类,这12个大类分别是:
1、语言符号及其分类 (LC_CTYPE)
2、数字(LC_NUMERIC)
3、比较和排序习惯(LC_COLLATE)
4、时间显示格式(LC_TIME)
5、货币单位(LC_MONETARY)
6、信息主要是提示信息,错误信息, 状态信息, 标题, 标签, 按钮和菜单等(LC_MESSAGES)
7、姓名书写方式(LC_NAME)
8、地址书写方式(LC_ADDRESS)
9、电话号码书写方式(LC_TELEPHONE)
10、度量衡表达方式 (LC_MEASUREMENT)
11、默认纸张尺寸大小(LC_PAPER)
12、对locale自身包含信息的概述 (LC_IDENTIFICATION)。

设定locale就是设定12大类的locale分类属性,即 12个LC_*。除了这12个变量可以设定以外,为了简便起见,还有两个变量: LC_ALL和LANG。它们之间有一个优先级的关系: LC_ALL>LC_*>LANG 可以这么说,LC_ALL是最上级设定或者强制设定,而LANG是默认设定值。
如果你设定了LC_ALL=zh_CN.UTF-8,那么不管LC_*和LANG设定成什么值,它们都会被强制服从 LC_ALL的设定,成为 zh_CN.UTF-8。

例如:
我说中文,身处中华人民共和国,使用国标2312字符集来表达字符。 zh_CN.GB2312=中文_中华人民共和国+国标2312字符集。
NLS_LANG 由三部分组成 : NLS_LANG=<NLS_LANGUAGE>_<NLS_TERRITORY>.<clients characterset>
:NLS_LANG=语言_地域_客户端字符集
LANG值为"en_US.UTF-8" 时,意味着NLS_LANG用以下格式设置 NLS_LANG=AMERICAN_AMERICA.AL32UTF8

如果LANG值为 "fr_FR.UTF-8" 那在 NLS_LANG设置的值就是 FRENCH_FRANCE.AL32UTF8.

修改 /etc/sysconfig/下 i18n文件,换成你想要的字符集即可。

例如,在rhel5.7下i18n文件内容如下

LANG="zh_CN.UTF-8"

如果要换成GBK字符集

LANG="zh_CN.GBK"即可

修改 /etc/sysconfig/i18n 文件,如

LANG="en_US",xwindow会显示英文界面,

LANG="zh_CN.GB18030",xwindow会显示中文界面。

SQL> show parameter nls_language

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

nls_language string SIMPLIFIED CHINESE

以上是root用户下的设置修改。而oracle用户需要修改/home/oracle/.bash_profile下添加

export NLS_LANG="SIMPLIFIED CHINESE_CHINA".ZHS16GBK
export LC_ALL=zh_CN.GBK
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: