ITPub博客

首页 > 数据库 > Oracle > Oracle11g字符乱码解决

Oracle11g字符乱码解决

原创 Oracle 作者:woshishui11211 时间:2015-04-15 18:00:39 0 删除 编辑

Oracle11g字符乱码解决

 

1.      查看linux支持语言

# cat /etc/sysconfig/i18n

LANG="en_US.UTF-8"

SYSFONT="latarcyrheb-sun16"

 

2.      创建实例选择AL32UTF8

clip_image002

 

3.      三层NLS体系

任何一个会话session在连接入数据库之后,都会面对三层NLS参数体系,分别为:DatabaseInstanceSession

 

ü  Database Level NLS Parameter:数据库层面的NLS参数是在数据库创建的时候确定的一系列的参数。在创建数据库的时候,我们都可以通过OUI或者responseFile进行配置。大部分Database Level NLS Parameter都是不可以改变,或者不能轻易改变的,如CharacterSet

 

ü  Instance Level NLS Parameter:在数据库运行过程中,一些NLS参数是通过Spfile/Pfile参数文件进行配置,并且可以对Database Level NLS进行一定的覆盖修改。如果Instance LevelDatabase Level的发生冲突,以Instance Level覆盖Database Level的配置;

 

ü  Session Level NLS Parameter:这个层面是和用户连接效果最直接的层面。用户使用的NLS参数很多都是取到这个层面的参数。Session Level Parameter来自客户端配置内容,主要是通过一系列的环境变量来确定。Session LevelParameter是可以覆盖Instance Level的参数的;

 

4.      Database Level NLS Parameter

Database level参数是三层体系中最底层,这个层面的参数取值和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                            11.2.0.3.0

 

Oracle官方推荐的角度,我们设置AL32UTF8字符集作为数据库字符集

 

5.      Instance level NLS Parameter

Instance参数主要来自于参数文件SPFILE/PFILE。我们可以通过nls_instance_parameters来查看这个层面的参数配置

SQL> select * from nls_instance_parameters;

 

PARAMETER                                      VALUE

--------------------------------------------- -------------------------

NLS_LANGUAGE                                        AMERICAN

NLS_TERRITORY                                        AMERICA

 

通常我们不会在参数文件层面进行NLS参数配置,保持Database Level的默认配置就可以了。

 

6.      Session Level NLS Parameter

Session LevelNLS参数是和用户最直接交互的部分。我们可以通过nls_session_parameters视图查看到这个内容

SQL> select * from nls_session_parameters;

 

PARAMETER                                      VALUE

--------------------------------------------- -------------------------

NLS_LANGUAGE                                        AMERICAN

NLS_TERRITORY                                        AMERICA

NLS_CURRENCY                                         $

NLS_ISO_CURRENCY                                AMERICA

NLS_NUMERIC_CHARACTERS                                  .,

NLS_CALENDAR                                         GREGORIAN

NLS_DATE_FORMAT                                DD-MON-RR

NLS_DATE_LANGUAGE                            AMERICAN

NLS_SORT                                           BINARY

NLS_TIME_FORMAT                                HH.MI.SSXFF AM

NLS_TIMESTAMP_FORMAT                              DD-MON-RR HH.MI.SSXFF AM

 

PARAMETER                                      VALUE

--------------------------------------------- -------------------------

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

 

session level的参数是影响最终我们看到NLS结果的控制因素。Session levelNLS参数来自客户端配置。对Windows而言,就是我们注册表中关于NLS_LANG等一系列的环境变量。Unix/Linux而言,就是我们配置在.bash_profile文件中定义的相应内容

 

7.      配置bash_profile文件

 

[oracle@oracle ~]$ cat .bash_profile

export NLS_LANG=american_america.AL32UTF8

 

8.      重启实例

 

9.      创建新表,带中午内容

10.              查询

SQL> select * from T_DEVICE;          

 

  DEVICEID     TYPEID DEVICENAME           DEVICEPOS

---------- ---------- -------------------- --------------------

DEVICEREGION             I      STATIONID

-------------------- - ----------

         2          2 雨监测1                 K1508+414

                        1              1

 

         4          2 雨监测2                 K1512+544

                        1              2

 

         6          2 雨监测2                 K1517+809

 

 

中文正确显示

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26217983/viewspace-1578408/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-03-15

  • 博文量
    39
  • 访问量
    272204