关于Oracle客户端显示乱码问题

本文介绍在Oracle数据库中,由于客户端与服务器端字符集设置不同导致的数据显示差异,并通过实际操作展示了如何解决由字符集不匹配引起的问题。

 看下面演示与分析:

SQL> select * from nls_database_parameters;
 
PARAMETER                      VALUE
------------------------------ ------------------------------
NLS_LANGUAGE                   AMERICAN
NLS_TERRITORY                  AMERICA
NLS_CURRENCY                   $
NLS_ISO_CURRENCY               AMERICA
NLS_NUMERIC_CHARACTERS         .,
NLS_CHARACTERSET               AL32UTF8
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                DD-MON-RR
NLS_DATE_LANGUAGE              AMERICAN
NLS_SORT                       BINARY
NLS_TIME_FORMAT                HH.MI.SSXFF AM
 
PARAMETER                      VALUE
------------------------------ ------------------------------
NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY              $
NLS_COMP                       BINARY
NLS_LENGTH_SEMANTICS           BYTE
NLS_NCHAR_CONV_EXCP            FALSE
NLS_NCHAR_CHARACTERSET         AL16UTF16
NLS_RDBMS_VERSION              9.2.0.4.0
 
20 rows selected.
 
windows客户机上: 
H:\Users\LuoTaoyang>chcp
活动代码页: 936
 
H:\Users\LuoTaoyang>set NLS_LANG=American_America.ZHS16GBK
 
 
SQL> DESC chartest;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 
 ID                                                 NUMBER(38)
 NAME                                               VARCHAR2(20)
 
SQL> insert into chartest values(1,'123你好吗ABC');
1 row created.
SQL> SELECT * from chartest;
        ID NAME
---------- ----------------------------------------
         1 123
你好吗ABC
SQL> select id,dump(name,1016) from chartest;
        ID
----------
DUMP(NAME,1016)
--------------------------------------------------------------------------------
         1
Typ=1 Len=15 CharacterSet=AL32UTF8: 31,32,33,e4,bd,a0,e5,a5,bd,e5,90,97,41,42,43
#‘123你好吗ABC’在ZHS16GBK字符集下16进制代码为:31 32 33 C4 E3 BA C3 C2 F0 41 42 43,之所以跟Oracle存储的不同时因为客户端字符集(ZHS16GBK)与Oracle主字符集(AL32UTF8)不同,Oracle在底层发生字符集转换的原因。
 
 
H:\Users\LuoTaoyang>set NLS_LANG=American_America.AL32UTF8
 
 
SQL> select * from chartest;
 
        ID NAME
---------- --------------------
         1 123浣犲ソ鍚桝BC
 
#出现乱码是因为此时Oracle客户端字符集与Oracle主字符集相同,Oracle不发生字符集转换。但在windows下依然用字符集(ZHS16GBK)显示。









本文转自 d185740815 51CTO博客,原文链接:http://blog.51cto.com/luotaoyang/301294,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值