oracle字符集问题解决分为两种情况:% i# X: U2 V9 \
/ H0 t5 D0 _" E7 S F
一、解决客户端问题,临时解决。(意思是把当前的环境变量设置来和系统的语言一样。以oracle为准。)* } }6 e' J2 N+ {5 E# W7 M* u9 v
7 G+ W7 f9 ^/ H) }6 H- \ 查看oracle字符集- D V# I! y0 f) ~' g' T
8 d8 ^: l7 i0 f; L. @9 _
SQL> select userenv('language') from dual;
$ W2 h4 R( _- h8 i; s# i
* j8 J' y5 f8 L& M1 [+ Q9 z USERENV('LANGUAGE')
7 a2 q: J1 X6 w" c4 e8 c
/ u$ Z5 d. S9 h8 A1 ?% r' T --------------------------------------------------------------------------------4 j' ]- m2 |- `3 S7 D Q$ I
! s) U$ E- u }2 s2 Q3 P SIMPLIFIED CHINESE_CHINA.UTF8' H& x5 h& i; K9 V
) |& D7 J/ M+ N9 D9 ^; n/ m+ e' t5 {
查看linux系统字符集
$ Y0 Z/ j' L6 K& D9 t / |9 v! V$ V2 A1 v$ \ ^% V
[root@ora ~]# env |grep LANG1 ~ r! f" x0 K$ ?5 V0 Y9 l
9 @# S# ]2 r9 y0 ~( v3 l
LANG=zh_CN.UTF-8
+ B# r# d; B: h! u( m6 _8 b ; k' F. P7 o3 _! O h
GDM_LANG=zh_CN.UTF-8* M* D* b3 [7 o7 _. Z
+ x0 ~4 l2 w% _
定义linux系统字符集+ P5 T' b1 a) f9 g
: _% n! r& H6 U [root@ora ~]# export NLS_LANG='SIMPLIFIED CHINESE_CHINA.UTF8'+ N7 J& M. E' d
5 }& m4 X5 _7 L8 Z0 T6 t$ P; V( Q! b 定义oracle环境字符集( N3 [3 d5 `: X- f g
. s! Y' C, {( R% c$ A3 H [root@ora ~]# su - oracle
L8 }4 Z" u( ?# E% }9 O( ^+ V + P1 \. g0 [- Q
[oracle@ora ~]$ export NLS_LANG='SIMPLIFIED CHINESE_CHINA.UTF8'
. [8 h, b3 S- G; I8 G3 w ( e# j2 B( U4 _% C3 ]
[oracle@ora ~]$ !sql5 N$ s6 Y! Y1 k+ a; }0 _
3 u3 x, A# B: _' m0 Y! R( G
查看结果. U& C" A; q U' M, z j" l% P' U
/ e, _' J1 b# i. Q7 A
SQL> select * from database_properties;
/ w% E5 R! N$ r( F& d- L
/ O- `3 r" b- ^. [. a 二、这种刚好相反,修改oracle与os一样(这种是盖总写的,一起学习了)下面也写出了两种方法,copy过来的,请大家参考
" A3 K% d% T# @$ a3 L% F: C
7 [% \* l, c/ ~3 Z& Z Linux 下更改 oracle客户端字符集和服务端字符集8 U& w5 |) t1 e. |! d- U
) _/ U" W% L+ n3 I 1.Linux 下更改 oracle客户端字符集,即设置环境变量" NLS_LANG"的值
: s1 f( S Z. \/ a8 W( X/ R7 S; g0 b / g9 w7 L6 A% l0 i
查看客户端字符集,在终端下执行:
8 x2 J) ?' Z3 x, \: F5 L/ t * q8 X2 E1 A& E) _
echo $NLS_LANG/ @6 d& {; C( }( s: F- `
; E' d9 f6 o- R. h
修改客户端字符集:
\: C. _1 K9 [$ J1 [
9 `% C. s7 P2 H) G sudo gedit /etc/environment
' U4 l S* F* Q% M ! H, m6 \. O7 y J; W0 ?2 i5 o
在environment 文件中增加以下内容:0 V, c b) J* Z
+ `, A. e: ]3 Z! v6 O NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK") c# b+ S# _' j! A$ w S
1 s- z# T! x. o" h; n8 ]' D. F
export NLS_LANG
, m6 D8 E, H# q/ Z6 Y* o+ }
' z5 _1 m& c$ z& [ i/ y 重新启动操作系统即可。
. M( i+ P5 D* O3 u" U ' i9 m& P- n) `, k! s# R, J" ^& J
2. 修改 oracle服务端的字符集。
( q7 [' E% V8 J, g
) l% Z8 p$ e0 ^( ~2 f" E' i 查看服务端字符集:
( A. D6 z8 S' n' }
3 |2 v0 ?" z l2 f- o0 M+ T3 m6 D/ p* l select userenv('language') from dual;, r( @0 h' C" K4 ~) \/ S
% K, h- X. s6 b* {. W
修改服务端字符集,终端下执行:
; |$ |5 [6 O0 l' F+ k : V/ K. U4 |' s( `$ L& Y+ g
$ORACLE_HOME/bin/sqlplus /nolog0 ?# a- _+ T6 C
" R8 }7 F. [6 b; e: u 进入sqlplus 命令行! Z E, ~9 L/ n+ r5 i s
, t( A/ T8 S8 f! A) ^% s5 P, e SQL>conn / as sysdba;
# R8 x7 U0 F( m- w& E9 N7 t# L/ k 3 [5 s, O9 B" b7 w4 M5 n# q" H
1 ) . 关闭数据库, U# j6 Z: O3 |" e
5 _9 E. v, s0 E* X1 o5 o
SQL>SHUTDOWN IMMEDIATE;; B, E& S8 f8 N; ~- r
- D, p/ N. Z- ~3 D8 c 2 ) . 启动到 Mount; @. Q* X# V( y- V6 `' Q
8 [# B+ R$ g2 S( F9 D' @( c2 j* P. J" p STARTUP MOUNT;
; M9 [% t' @. |/ y! [# T) @ 9 D$ o3 ~/ ?1 X) x3 R
ALTER SYSTEM ENABLE RESTRICTED SESSION;
& V, y+ O+ |. x# o N6 T - B* _0 _# [0 q& d" X; H3 x
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
) I% @ F( i5 ~& }7 e
9 \3 ?0 P6 M2 r) }- x* J ALTER SYSTEM SET AQ_TM_PROCESSES=0;6 B* |$ h5 [2 R$ C- }0 L
( D4 p6 O% I* {' @" p% s" ]; z ALTER DATABASE OPEN;
5 ]8 \0 K9 W9 k7 P
: h% ]8 F8 l* J* Y# J$ q% g/ I ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;9 X* _4 s. [! x* {9 q
1 P' F5 |* j1 o' e -- 下面一行语句可能会出现错误提示,可以不理会
4 `+ K" W( u9 l2 b8 Z 9 D& }7 o5 V5 f
ALTER DATABASE national CHARACTER SET INTERNAL ZHS16GBK;
; S- a' K' i1 Y: ^ 5 ^) W5 G+ m7 d8 Z$ f. H+ H
SHUTDOWN IMMEDIATE;+ I! @- r5 B. t& P4 Y
6 Q' W, @9 ~5 H' h0 P' \1 }2 v STARTUP; |