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 数据库的字符集保持一致。