oracle字符集深入研究

本文详细探讨了Oracle数据库中字符集的问题,包括字符集如何影响数据的存储和显示,以及如何处理因字符集不匹配导致的乱码问题。通过分析数据库字符集、NLS_LANG字符集和客户端应用字符集的关系,解释了数据导入导出时的字符集转换,并介绍了如何检查和避免数据完整性受损的方法,如使用csscan工具进行校验。
摘要由CSDN通过智能技术生成

   oracle字符集导致乱码问题

     今天是2013-12-04,今天深入研究一下oracle字符集的问题。

 以前自己也遇到过 在使用exp/imp导出导入数据的时候存在乱码的情况,也在终端查看数据的时候显示乱码的情况,今天这篇笔记给自己拨开迷雾,在此感谢分享知识的人员。

  我们在将数据存入 数据库 的时候通过数据库的字符集进行转换字符编码,然后存入数据库中,在数据库中字符集文件目录为(10G&11G):$ORACE_HOME/nls/data中。

可以查看数据库字符集信息如下:

SQL> select * from props$ where name like 'NLS_%';

NAME                           VALUE$                                   COMMENT$
------------------------------ ---------------------------------------- ----------------------------------------------------------------------
NLS_CSMIG_SCHEMA_VERSION       5                                        Character set migration utiltiy schema version #
NLS_LANGUAGE                   AMERICAN                                 Language
NLS_TERRITORY                  AMERICA                                  Territory
NLS_CURRENCY                   $                                        Local currency
NLS_ISO_CURRENCY               AMERICA                                  ISO currency
NLS_NUMERIC_CHARACTERS         .,                                       Numeric characters
NLS_CHARACTERSET               WE8ISO8859P1                             Character set
NLS_CALENDAR                   GREGORIAN                                Calendar system
NLS_DATE_FORMAT                DD-MON-RR                                Date format
NLS_DATE_LANGUAGE              AMERICAN                                 Date language
NLS_SORT                       BINARY                                   Linguistic definition

NAME                           VALUE$                                   COMMENT$
------------------------------ ---------------------------------------- ----------------------------------------------------------------------
NLS_TIME_FORMAT                HH.MI.SSXFF AM                           Time format
NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM                 Time stamp format
NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR                       Time with timezone format
NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR             Timestamp with timezone format
NLS_DUAL_CURRENCY              $                                        Dual currency symbol
NLS_COMP                       BINARY                                   NLS comparison
NLS_LENGTH_SEMANTICS           BYTE                                     NLS length semantics
NLS_NCHAR_CONV_EXCP            FALSE                                    NLS conversion exception
NLS_NCHAR_CHARACTERSET         AL16UTF16                                NCHAR Character set
NLS_RDBMS_VERSION              10.2.0.1.0                               RDBMS version for NLS parameters

21 rows selected.

SQL> 


在创建数据库的时候就需要指定字符集和国家字符集,字符集一旦选择后续改变会 存在相应风险,因此刚刚创建数据库时候选择合适的字符集尤为重要。

我们可以通过oracle自带的一个 oracle localle builder工具查数据库中字符集文件,对于linux或是unix该命令在$ORALE_HOME/nls/lbuilder/lbuilder,如我当前字符集为WE8ISO8859P1 :

并且可以找到字符的映射表,正是由于映射表的存在才知道每个编码代表的含义:

例如:

SQL> select nls_charset_id('WE8ISO8859P1') from dual;

NLS_CHARSET_ID('WE8ISO8859P1')
------------------------------
                            31

SQL> select dump('rhys') from dual;

DUMP('RHYS')
-----------------------------
Typ=96 Len=4: 114,104,121,115

SQL> select to_char('114','xxxxx') from dual;

TO_CHA
------
    72

SQL> select to_number('72','xxxxx') from dual;

TO_NUMBER('72','XXXXX')
-----------------------
                    114

SQL> select chr(114) from dual;

C
-
r

SQL> select to_char('104','xxxx' ) from dual;

TO_CH
-----
   68

SQL> select to_char('114','xxxx'),to_char('104','xxxx'),to_char('121','xxxxxx'),to_char('115','x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值