Linux环境解决Oracle 中文乱码
1)查看数据库字符集03:12:58 SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.ZHS16GBK
2)编辑linux 的NLS_LANG变量
[oracle@oraserv ~]$ pwd
/home/oracle
[oracle@oraserv ~]$ ls -a. cr_dbprod.sql .gconfd .ICEauthority .rman_history .Xauthority
.. cr_db.sql .gnome logmnr sel.sql .xsession-errors
.bash_history cr_dict.sql .gnome2 .metacity sql.log 中国
.bash_logout Desktop .gnome2_private .mozilla sqlnet.log
.bash_profile .dmrc .gstreamer-0.10 .nautilus .sqlplus_history
.bashrc .eggcups .gtkrc-1.2-gnome2 ora.sh s.sh
close_bak_command.sql ftp.msg hot_bak_cmd.sql ora.txt start.sh
cold_bak.sql .gconf hot_bak.sql .redhat .Trash
[oracle@oraserv ~]$ vi .bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific aliases and functions
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
".bashrc" 10L, 167C written
3)注销oracle用户,重新登录[oracle@oraserv ~]$ su - oracle
[oracle@oraserv ~]$ env |grep LANG
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
LANG=en_US.UTF-8
[oracle@oraserv ~]$ export ORACLE_SID=prod
[oracle@oraserv ~]$ env |grep LANG
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
LANG=en_US.UTF-8
通过sqlplus验证:
[oracle@oraserv ~]$sqlplus '/as sysdba';
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Apr 8 03:15:59 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
03:16:02 SQL> conn scott/tiger
Connected.
03:16:08 SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
DEPT TABLE
EMP TABLE
BONUS TABLE
SALGRADE TABLE
03:16:16 SQL> update dept set dname='财务' where deptno=10;
1 row updated.
03:16:47 SQL> select * from dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 财务 NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
注意:解决问题的原则,客户端的字符集和oracle 数据库的字符集保持一致。