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.shclose_bak_command.sql ftp.msg        hot_bak_cmd.sql    ora.txt        start.shcold_bak.sql           .gconf         hot_bak.sql        .redhat        .Trash

[oracle@oraserv ~]$ vi .bashrc

 

# .bashrc# Source global definitionsif [ -f /etc/bashrc ]; then        . /etc/bashrcfi# User specific aliases and functionsexport NLS_LANG=AMERICAN_AMERICA.ZHS16GBK ".bashrc" 10L, 167C written

3)注销oracle用户,重新登录

[oracle@oraserv ~]$ su - oracle[oracle@oraserv ~]$ env |grep LANGNLS_LANG=AMERICAN_AMERICA.ZHS16GBKLANG=en_US.UTF-8[oracle@oraserv ~]$ export ORACLE_SID=prod[oracle@oraserv ~]$ env |grep LANGNLS_LANG=AMERICAN_AMERICA.ZHS16GBKLANG=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 - ProductionWith the Partitioning, OLAP and Data Mining options 03:16:02 SQL> conn scott/tigerConnected.03:16:08 SQL> select * from tab; TNAME                          TABTYPE CLUSTERID------------------------------ ------- ----------DEPT                           TABLEEMP                            TABLEBONUS                          TABLESALGRADE                       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 数据库的字符集保持一致。