oracle字符集问题解决分为两种情况:
! t, y8 z3 z9 B9 n 7 y& ^: t' M% P- n' P1 d
一、解决客户端问题,临时解决。(意思是把当前的环境变量设置来和系统的语言一样。以oracle为准。)0 p2 U, ^7 \$ e0 U% Q/ R
+ Q$ n# k6 s+ m4 }+ \- o% t 查看oracle字符集4 h# c; K/ U( I7 y
5 Q' a# Y8 t) X/ w. }5 | SQL> select userenv('language') from dual;2 Y* l8 g8 o' R2 G+ R
, {2 y3 r0 O1 ]0 ]. N, q
USERENV('LANGUAGE')/ J* n0 g% p, p) a
/ G' j6 Z/ \# J7 ?. B
--------------------------------------------------------------------------------
- ]/ F# W4 Q) d9 Z/ q3 C* s
f1 ?# l4 O$ ]7 D1 _8 q6 e SIMPLIFIED CHINESE_CHINA.UTF8
; J( f e) |& x% B \- n& w% i; {* h/ K$ X2 x
查看linux系统字符集
a0 f' \1 c8 f0 V
; o" ~+ _. b% ^9 r5 p. p# { [root@ora ~]# env |grep LANG" s! i7 N. r- T" b4 g
/ n2 q4 Y5 i+ c) l# z1 V2 c" p& M3 c% R
LANG=zh_CN.UTF-8; D# v, `% B) m! \( }3 A- A
/ Q; l% @! l. E- p% \( W& Y3 r0 A
GDM_LANG=zh_CN.UTF-8
( o& {' S4 s/ s9 M# X5 [
5 `+ p4 N0 x4 a( g 定义linux系统字符集# N! L0 O& T& I
/ @( _# T# o) h4 _1 n5 \6 { [root@ora ~]# export NLS_LANG='SIMPLIFIED CHINESE_CHINA.UTF8'
% E/ P* \) S3 v. l : O' _5 I# g3 A% C
定义oracle环境字符集, [2 |. ?5 ? Z
( U3 x; g( R. h
[root@ora ~]# su - oracle' w* ?" c! {. R' G1 Y$ |" g
5 n7 m; `6 J2 j& r- E- W! Y
[oracle@ora ~]$ export NLS_LANG='SIMPLIFIED CHINESE_CHINA.UTF8', W* K6 }5 J. x! n: z
; K& M" l1 X: P5 h
[oracle@ora ~]$ !sql" r! r- J @* f& U/ D3 X+ {
* m: r) A$ v" n3 } 查看结果7 D# ?3 c. A9 h, S: ]* G
9 }/ E0 `; \0 s1 [+ `
SQL> select * from database_properties;/ y! S# x/ X, T% }, ?0 ]
$ _. q; u( \* d9 R& a w6 r) h
二、这种刚好相反,修改oracle与os一样(这种是盖总写的,一起学习了)下面也写出了两种方法,copy过来的,请大家参考6 _, d. q6 }, Q& V3 z6 i2 A
! n$ i0 b5 n, g, y; F9 s1 E a
Linux 下更改 oracle客户端字符集和服务端字符集$ [& M- E$ M3 A
$ U5 X# {8 Z5 ~7 M% M/ B9 B
1.Linux 下更改 oracle客户端字符集,即设置环境变量" NLS_LANG"的值7 |' N2 N' e- X& }( V) B$ W
' x$ L- r3 P! d$ b
查看客户端字符集,在终端下执行:
( Q' [ y3 u i " f; V9 [, T6 `+ i" p
echo $NLS_LANG
* J3 E# @3 b8 `. n) W
' ~0 C W- d6 Z% k- d3 A- Q f 修改客户端字符集:
+ A& h0 l* }4 m5 }
' {6 V4 Q0 o. ?+ |2 f6 G' a sudo gedit /etc/environment; e8 c$ b& [+ N
, \+ f/ @7 b* D
在environment 文件中增加以下内容:
3 D' l! B* ?1 S
$ b9 g( v7 }6 ^6 A$ R$ X+ w NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
6 R0 H" E$ T; t5 x% Q X- ]+ Y# q7 O x - u9 M. z! \7 m2 n+ _& X
export NLS_LANG$ L, j, D5 N. q+ Y9 j7 T
4 {5 m( r& y% C9 r* T
重新启动操作系统即可。
6 d9 s3 L0 W! y1 w2 g( d; z 5 \. ^8 W7 [. Y u; P0 @2 g
2. 修改 oracle服务端的字符集。9 c4 Z, ?2 q- j ?
1 h) u5 ]% U6 K 查看服务端字符集:
. v, i# E7 }8 [9 o' h; R
) X2 S4 @0 g! ^! e" U. z select userenv('language') from dual;" H! U% s3 N9 m# r; |% _
1 S& p1 ^$ H! Z: h7 G 修改服务端字符集,终端下执行:
& ]5 a& }+ g4 r: r. P 6 k5 n: U0 m7 } w0 O
$ORACLE_HOME/bin/sqlplus /nolog
/ p& {6 f( l5 s: P$ @ - i) `4 t, p% _- L
进入sqlplus 命令行
% O- |/ y; r' c4 B
. x8 `$ h5 k n9 m' v' x SQL>conn / as sysdba;
: t4 f2 W/ E" s$ w* ^) d
8 _8 c( }6 B1 n8 t( L+ E, K' \1 Q 1 ) . 关闭数据库
, i* m3 X* t" B# v
& d ?4 [$ S9 H( `7 R8 ~- H SQL>SHUTDOWN IMMEDIATE;
s( o9 ]4 w7 C; l4 M
) c& b! v8 a7 a/ k4 Q 2 ) . 启动到 Mount3 _! A) s8 x. f* m) c2 V
* F$ B" _" r( y2 s1 `# T STARTUP MOUNT;
' u, R2 M/ p0 w& a6 k0 F
) {, |6 y4 z! I* G% F% b; o ALTER SYSTEM ENABLE RESTRICTED SESSION;
' K+ C9 r4 e) Y" w , P% L' d$ d1 r3 D1 K1 S+ i: @
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;/ z( s5 W) c/ L( K
! _; G: \3 m% ~6 k( r/ l! c8 W ALTER SYSTEM SET AQ_TM_PROCESSES=0;9 y% x& {& r. ~! @- g
) g9 G5 M( ?$ e& V, D
ALTER DATABASE OPEN;
! o2 N9 G0 [) V9 u3 M
) V+ ~, c) i# ]& k G0 i" T ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;. g& w# @' o! W
4 l B* G& }; M7 k
-- 下面一行语句可能会出现错误提示,可以不理会
( g/ O f" V% u: q
% A' J# H7 R6 H; U8 A E+ R ALTER DATABASE national CHARACTER SET INTERNAL ZHS16GBK;$ P& ~5 L& P+ _& d
3 `) g* e& f7 F5 v. J
SHUTDOWN IMMEDIATE;( X9 A ]9 ^; l5 h- S) t& B
; r% l* d0 {% \% l; e
STARTUP; |