解决RedHat Enterprise Linux 下Oracle不能显示中文的方法(一)

2014-11-24 17:56:41 · 作者: · 浏览: 2

二、问题描述:
1.110服务器上的数据库为中文字符集,其内的数据表的多项列值为中文。
1.120服务器上的数据库中字符集并不支持ZHS16GBK,所以在将从1.110上导出来的.dmp文件导入到数据库中的时候便会出现以?代替中文字符的现象。


三、解决方法描述:
1、以root登录,设置linux系统语言为中文,即zh_CN(可在/etc/sysconfig/i18n文件中修改,当然前提是你需要有中文的安装包);设置完毕之后需要重启(远程登录的话好像只能重启了)或者按ctrl+alt+backspace组合键,使语言设置生效。


2、以oracle用户登录编辑家目录下的.bash_profile文件,在其后添加 export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
nls_lang是数据库的字符集变量,默认的为AMERICAN


3、以sysdba来修改数据库的字符集,步骤如下:


查看字符集是否改变:
SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;

Database altered.

SQL> select * from v$nls_parameters;

PARAMETER VALUE
---------------------------------------------------------------- ---------------
NLS_LANGUAGE ZHS16GBK ——已经改变,之前为AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_CHARACTERSET ZHS16GBK
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM

PARAMETER VALUE
---------------------------------------------------------------- ---------------
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI
NLS_DUAL_CURRENCY $
NLS_NCHAR_CHARACTERSET UTF8
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE

19 rows selected.


重启刷新再检查一次:
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 236000356 bytes
Fixed Size 451684 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.


SQL> select * from v$nls_parameters;

PARAMETER VALUE
---------------------------------------------------------------- ---------------
NLS_LANGUAGE ZHS16GBK
NLS_TERRITORY AMERICA
NLS_CURRENCY