现在的位置: 首页 > 综合 > 正文

Oracle 全球化特性与字符集

2012年02月23日 ⁄ 综合 ⁄ 共 5542字 ⁄ 字号 评论关闭

--==========================

-- Oracle 全球化特性与字符集

--==========================

 

    数据库的全球化特性是数据库发展的必然结果,位于不同地区、不同国家、不用语言而使用同一数据库越来越普遍。Oracle数据库提供

了对全球化数据库的支持,消除不同文字、语言环境、历法货币等所带来的差异、使得更容易、更方便来使用数据库。

 

一、Oracle全球化特性

        Oracle全球化特性包括

            Language support

            Territory support

            Character set support

            Linguistic sorting

            Message support

            Date and time formats

            Numeric formats

            Monetary formats

        Oracle全球化特性中最重要的则是字符集,即使用何种字符集将数据存储在数据库中

       

二、什么是字符集

    1.定义

        主要是讨论两个问题,一是字符如何存储,二是如何字符显示

        简单的说就是输入的数据、字符、符号等如何存储到到计算机并将其翻译出来,而此处则是存储到数据库系统内。

        比如英文的个英文字符、个阿拉伯数据字,#$等。美国ANSI则使用了一个单字节(7)来表示了使用的标准字符集

        由于世界各国和各个地区使用的符号的多样性,而单字节仅仅能表示个字符,因此就有使用到了多字节来表示各自不同的字符

        正是由于上述原因,因此产生了不同的字符集的概念,如美国使用的为US7ASCII,西欧则使用的是WE8ISO8859P1,中国则是ZHS16GBK

        同时,为了统一世界各国字符编码,统一编码字符集的概念应运而生,这就是Unicode

        Oracle中,几种常用的UnicodeUTF-8AL16UTF8AL32UTF8

   

    2.Oracle所支持的字符集及分类

        Oracle支持两百多种字符集,包含了单字节、可变字节以及通用字符集等。

        字符集通常根据说使用的字节数来分类,通常分为以下几类

        a.单字节字符集,如US7ASCII(7bit)WE8ISO8859P1(8bit)WE8DEC(8bit)

        b.可变长度字符集,如JA16SJISZHT16HKSCS

        c.通用字符集,如AL32UTF8

   

    3.UTF-8UTF-16UTF8AL32UTF8AL16UTF8

        上述是几个经常容易混淆的概念,在此有必要做一下说明

        UTF-8UTF-16UCS-2是标准的Unicode字符集,即是使用UTF-8UTF-16UCS-2来实现编码

        UTF8指的是Oracle中的字符集,使用UTF-8来编码

        AL32UTF8AL16UTF8Oracle数据库中使用基于标准Unicode字符集编码而定义的Unicode字符集

        下面主要说明一下AL32UTF8AL16UTF8

        AL32UTF8

            是一个bitUnicode字符编码,使用UTF-8来实现编码

            支持可变长编码,是ASCII码的严格超集,即ASCII字符集中表示字符码值与AL32UTF8中完全相同

            该字符集支持-4字节可变长度编码,对欧洲使用的字符通常用-2个字节,对于亚洲则使用个字节,即一个汉字使用个字节表示

            对于增补的特殊符号,则使用个字节来表示

        AL16UTF8

            是一个bitUnicode字符编码,使用UTF-16来实现编码

            使用固定长度来表示字符,通常使用个字节来实现

            该字符集通常适用于欧洲和亚洲国家,因为个字节足以满足这些字符的码点需求

            对于增补的特殊符号,AL16UTF8则使用个字节来实现

            对于AL16UTF8中的字符,要么使用个字节,要么是个字节来表示

        Oracle数据库支持的Unicode字符集

            Character Set     Unicode Encoding    Database Character Set    National Character Set

            UTF8              UTF-8               Yes                       Yes(Oracle 9i and 10g only)

            AL32UTF8          UTF-8               Yes                       No

            AL16UTF16         UTF-16              No                        Yes

   

    4.字符集影响的数据类型

        对于二进制数据类型,字符集的设置不影响该类型数据的存储,如视频、音频等

        影响的数据类型为:char,varchar2,nchar,nvarchar2,blob,clob,long,nclob

       

三、相关NLS参数的设定

 

    1.查看NLS参数

        a.本次会话中设定及使用的NLS参数(nls_session_parameters)

            select * from nls_session_parameters;

                SQL> col parameter format a28

                SQL> col value format a35

                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

 

        b.查看数据库中设定的NLS参数

            select * from nls_database_parameters;

 

        c.查看基于实例设定的NLS参数

            select * from nls_instance_parameters;

           

    2.设定nls_language参数

        设定nls_language影响的内容

        NLS_LANGUAGE                   AMERICAN     --只要设定该参数则下面的参数即可确定

            NLS_DATE_LANGUAGE              AMERICAN

            NLS_SORT                       BINARY

       

        --下面查看nls_language参数以及设定不同的nls_language所带来的影响

            SQL>select * from nls_session_parameters where parameter='NLS_LANGUAGE';

 

            PARAMETER                    VALUE

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

            NLS_LANGUAGE                 AMERICAN

 

            SQL> select empno,ename,round(sal*1.35,2) sal,hiredate from emp where sal<1200;

 

                 EMPNO ENAME             SAL HIREDATE

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

                  7369 SMITH            1080 17-DEC-80

                  7876 ADAMS            1485 23-MAY-87

                  7900 JAMES          1282.5 03-DEC-81

 

            SQL> alter session set nls_language='ITALIAN'; --nls_language设定为ITALIAN

 

            Session altered.

 

        --再次执行上面的查询语句可以看出日期月份的表示发生了变化

            SQL> select empno,ename,round(sal*1.35,2) sal,hiredate from emp where sal<1200;

 

                 EMPNO ENAME             SAL HIREDATE

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

                  7369 SMITH            1080 17-DIC-80

                  7876 ADAMS            1485 23-MAG-87

                  7900 JAMES          1282.5 03-DIC-81

         

    3.设定nls_territory参数

        设定nls_territory影响的内容          

        NLS_TERRITORY                  AMERICA        --只要设定该参数则下面的参数即可确定

            NLS_CURRENCY                   $

            NLS_DUAL_CURRENCY              $

            NLS_ISO_CURRENCY               AMERICA

            NLS_NUMERIC_CHARACTERS         .,

            NLS_DATE_FORMAT                DD

抱歉!评论已关闭.