Oracle 全球化特性与字符集

  • 时间:
  • 浏览:4
  • 来源:大发彩神幸运飞艇_大发神彩幸运飞艇官方

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

    National Character Set:主好多好多 我用于辅助Character Set。由于早期的数据库中好多好多 使用了单字节字符集,但随着业务的时需及发展,

            西文WE8ISO8859P1那末全部支持日文字符,好多好多 不需要将字符集改为JA16EUC,全部形式为:NLS_LANG = JAPANESE_JAPAN.JA16EUC

              7369 SMITH            10100 17-DEC-100

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

            AL16UTF16         UTF-16              No                        Yes

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

        该参数的格式为:NLS_LANG = language_territory.charset  如:NLS_LANG=French_France.UTF8

            ORA-12899: value too large for column "SCOTT"."TB_B"."ENAME" (actual: 21,

            NLS_TIME_FORMAT              HH24:MI:SSXFF

                                           NLS_COMP              BINARY

            另有1个参数所影响的具体值请参考前面要素的描述及演示

            dbms_session.sest_nls('NLS_DATE_FORMAT','''yyyy-mm-dd''')                  

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

            Character set support

                  7369 SMITH            10100 17/12/100

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

    v$nls_valid_values

            insert into tb_b select 1,'中华人民共和国' from dual

            TB_C            ENAME           VARCHAR2                 40        

                NLS_LANGUAGE                                  AMERICAN

                SQL> select * from nls_database_parameters;

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

Oracle 归档日志

                  7900 JAMES          1282.5 03-DIC-81

            Session altered.

        不正确的设定土辦法

            alter session set nls_date_format = 'yyyy-mm-dd';

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

            PARAMETER                    VALUE

                NLS_DATE_FORMAT              DD-MON-RR

            select * from nls_instance_parameters;

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

                                      *

                NLS_CHARACTERSET                              AL32UTF8     

            NLS_NCHAR_CONV_EXCP          FALSE         

            SQL> alter session set nls_date_format = 'yyyy-mm-dd';  

                 Name                                      Null?    Type

                NLS_ISO_CURRENCY                              AMERICA

            通常,在nls_language设定后,应为nls_territory设定合理的值,因此我我语言设定为简体中文,地区设定为澳大利亚则不太合理

            NLS_LANGUAGE                 AMERICAN

                 EMPNO ENAME             SAL HIREDATE

    1.未正确设置NLS_LANG时容易由于数据不转换或转换错误

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

            from employees

                C:/>sqlplus scott/tiger@list2    --从客户端使用tnsnams.ora登陆到服务器

              7900 JAMES          1282.5 03-DEC-81

                NLS_TIME_FORMAT              HH.MI.SSXFF AM

                NLS_ISO_CURRENCY             AMERICA

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

            LENGTHB(ENAME)

                  7369 SMITH            10100 19100-12-17

        客户端使用的NLS_LANGNLS_LANG=SIMPLIFIED CHINESE_HONGKONG.US7ASCII

            06.Fevr..100      

            Copyright (c) 1982, 1005, Oracle.  All rights reserved.

          2  where parameter like '%CHARACTERSET';

                PARAMETER                    VALUE

            对于使用同样的语言不同国家或地区,比如英语,澳大利亚和英国,nls_territory设定不同,则同样影响相关参数如currency

            --都时需看出服务器的设置与Window客户端的设置是不相同的

        下面主要说明一下AL32UTF8AL16UTF8

                NLS_DATE_LANGUAGE            AMERICAN

    2.不当设置引起导入导出时的错误

                 EMPNO ENAME             SAL HIREDATE

            --修改后,仅仅是日期显示位于了变化

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

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

    7.NLS参数设定的不同级别及优先顺序(下面的描述中级别由低到高,即SQL函数级别的NLS参数优先级最高)

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

                  7369 SMITH            10100 17-DIC-100

            SQL> insert into tb_b select 1,'中华人民共和国' from dual;  --超出长度

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

        c.使用alter session来修改NLS参数

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

                NLS_COMP                     BINARY

            NLS_DUAL_CURRENCY            ?

                        7

            13.Janv..100

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

        Session altered.

            NLS_DATE_FORMAT                DD-MON-RR

                  7876 ADAMS            1485 23-MAY-87

            select to_char(hire_date,'DD.Mon.YYYY','NLS_DATE_LANGUAGE=FRENCH')

  Oracle 联机重做日志文件(ONLINE LOG FILE)

            NLS_TIMESTAMP_TZ_FORMAT      DD-MON-RR HH.MI.SSXFF AM TZR

            该字符集通常适用于欧洲和亚洲国家,由于个字节足以满足哪哪好多个字符的码点需求

            SQL> select substr(ename,1,4) from tb_c ; --截取子串(字符数)

    v$nls_parameters

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

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

            NLS_TERRITORY                FRANCE

        当使用单字节字符集时,则字符数与字节数是相等的,使用多字节字符集时,则不相等,由于另有1个字符使用到了多个字节

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

        设定nls_language影响的内容

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

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

        PARAMETER                    VALUE

                SQL> select * from nls_session_parameters;

        在将数据从另有1个Oracle数据库导出只是 再导入到另外另有1个Oracle数据库,由于两者字符集不同,则位于转换

            SQL> select * from nls_session_parameters;    --查看会话中的参数由于被设定为FRENCHFRANCE

            NLS_NUMERIC_CHARACTERS         .,

    4.NLS_LANG参数的设定

            USER is "SCOTT"

            Table created.

        NLS_LENGTH_SEMANTICS不影响SYSSYSTEM用户创建的表,即两者使用的是以字节统计长度

        不需要 被设定为ANSIBINARY(缺省值)LINGUISTIC 用于设定SQL操作时的比较行为

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

            SQL> col value format a35

            NLS_LENGTH_SEMANTICS         BYTE

            NLS_LENGTH_SEMANTICS         BYTE

                  7900 JAMES          1282,5 1981-12-03    

                With the Partitioning, OLAP and Data Mining options

            Language support

            NLS_SORT                       BINARY

                NLS_NUMERIC_CHARACTERS       .,

        SQL*Loader

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

        --再次执行上面的查询的话都时需看出日期月份的表示位于了变化

            对于直接路径土辦法 ,数据基于客户端NLS设置来转换

        而对于nchar,nvarchar2,clob,nclob则老会 使用基于字符来统计字节的长度

        --在设定为英语后执行查询都时需看出查询结果同美语是一样的

            SQL> create table tb_c(id number,ename varchar2(10 char));--ename使用显示值字符来作为存储长度

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

Oracle 用户、对象权限、系统权限

        服务器端的字符集为AL32UTF8,Window客户端设置为AL32UTF8,OracleNet认为两者一致,则不执行转换,无效的数据将输入到数据库

            [oracle@oradb ~]$ sqlplus /nolog                              --启动SQLPlus

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

            当导出DDL时,导出文件使用NLS_LANG指定的字符集,当指定的字符集不同于数据库字符集时,转换将位于

    nls_database_parameters

                  7876 ADAMS            1485 23/05/87

        主好多好多 我讨论另有1个大问题,一是字符怎么存储,二是怎么字符显示

        一齐,为了统一世界各国字符编码,统一编码字符集的概念应运而生,这好多好多 我Unicode

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

              7876 ADAMS            1485 23-MAY-87

        因此我设定了该参数,则其它参数就挑选了。当然也都时需只设定其中的一要素,NLS_LANG那末在环境变量中设定。

七、更多参考

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

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

            Connected.

        不需要 存储可变长度字符集                        不需要 存储Unicode字符集,要么使用AL16UTF8UTF8

    2.设定nls_language参数

        应该设置正确的NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252

                  7876 ADAMS            1485 1987-05-23

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

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

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

            c.找到NLS_LANG子项,如为该子项输入值SIMPLIFIED CHINESE_CHINA.ZHS16GBK

五、Character SetNational Character Set  

        此种情况报告都时需存储多字节汉字到单字节数据中

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

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

             EMPNO ENAME             SAL HIREDATE

        Session altered.

            --首先查看一下服务器段的languageterritorycharacter set

        d.使用SQL函数来设定NLS参数(具有最高优先级别)

            NLS_CURRENCY                 ?

        SQL> alter session set nls_language='ENGLISH';   --nls_language设置为英语

            NLS_LANG = JAPANESE_JAPAN.WE8ISO8859P1

              7900 JAMES          1282,5 81-12-03

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

        NLS_NCHAR_CHARACTERSET       AL16UTF16

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

        NLS_LANG为另有1个总控参数,控制了前面描述的nls_languagenls_territory的行为

    6.NLS_LENGTH_SEMANTICS参数

            PARAMETER                    VALUE

            第一要素为language,如示例中为French

        --nls_territroy设置为加拿大后,日期位于了变化,小数位符号也位于了变化

        a.在初始化参数中设定NLS参数及使用缺省的NLS参数,哪哪好多个参数在服务器端使用,不影响客户端

            TB_B            ENAME           VARCHAR2                 10

    5.NLS_COMP参数

SPFILE错误由于数据库无法启动

            French_France.WE8ISO8859P1环境变量下修改nls_date_format

                NLS_NUMERIC_CHARACTERS                        .,

                 SQL> insert into tb select 1,'鲁滨逊' from dual;   --插入中文记录

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

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

            --------

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

    Oracle Net会比较客户端和服务器之间的字符集,在时需的只是 Oracle Net则实现透明、自动转换字符集

            Numeric formats

            中华人民

    3.UTF-8UTF-16UTF8AL32UTF8AL16UTF8

            NLS_TIMESTAMP_TZ_FORMAT      DD/MM/RR HH24:MI:SSXFF TZR

                NLS_TIME_TZ_FORMAT           HH.MI.SSXFF AM TZR

三、相关NLS参数的设定

        用于设定以何种土辦法 来统计字符串的长度,缺省的为按字节来统计。当指定另有1个列为char(20)则表示使用个字节来存储数据

            NLS_DATE_LANGUAGE            FRENCH

            ERROR at line 1:

        NLS_TERRITORY                  AMERICA        --因此我设定该参数则下面的参数即可挑选

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

        NLS_LENGTH_SEMANTICS允许创建char,varchar2,long类型列使用基于字节、也都时需使用基于字符来统计长度

一、Oracle全球化行态

            Monetary formats

            where hire_date > '01-JAN-100';

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

            Oracle服务器段来通信,该设置通常对Oracle提供的客户端有效,如SQLPlus

                NLS_TIMESTAMP_TZ_FORMAT      DD-MON-RR HH.MI.SSXFF AM TZR

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

              7900 JAMES          1282.5 03/DEC/81 

                1 row created.

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

            Session altered.

                 EMPNO ENAME             SAL HIREDATE

            NLS_TIMESTAMP_FORMAT         DD/MM/RR HH24:MI:SSXFF

        在参数NLS_LANG=French_France.AL32UTF8,该参数分为个要素来设定

                NLS_CALENDAR                 GREGORIAN

    1.定义

            NLS_ISO_CURRENCY               AMERICA

            Message support

                         1 鲁滨逊

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

                Connected to:

                                           NLS_ISO_CURRENCY      FRANCE

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

            SQL> conn scott/tiger;

            SQL> select lengthb(ename) from tb_c;  --计算长度(字节数)

                NLS_CURRENCY                                  $

            NLS_TIME_TZ_FORMAT           HH24:MI:SSXFF TZR

                        21

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

        --从下面的查询都时需看到日期部整理生了变化

            Character Set     Unicode Encoding    Database Character Set    National Character Set

            SQL> select * from nls_session_parameters where parameter like 'NLS_LENG%';

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

             EMPNO ENAME             SAL HIREDATE

        该参数都时需用于设定服务器和客户端的languageterritory值,也可设置客户端输入数据和显示的字符集

二、哪哪好多个是字符集

                 EMPNO ENAME             SAL HIREDATE

        假定服务器的字符集设置为US7ASCIINational Character SetUTF8

        b.在客户端使用环境变量来设定NLS参数,该参数高于服务器端的NLS设置

                  7876 ADAMS            1485 23-MAG-87

        上述是哪好多个老会 容易混淆的概念,在此有必要做一下说明

                SQL> col parameter format a28

            nls_language设定了不同的值,则影响了日期的表示土辦法 排序等

        创建时被定义                                  创建时被定义

            AL32UTF8          UTF-8               Yes                       No

                Commit complete.

            Territory support

            NLS_DATE_LANGUAGE              AMERICAN

            NLS_CALENDAR                 GREGORIAN

            SUBSTR(E

            NLS_LANGUAGE                 FRENCH

                SQL> commit;

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

              7369 SMITH            10100 17/DEC/100

            08.Mars .100

                NLS_TERRITORY                AMERICA

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

            SQL> insert into tb_c select 1,'中华人民共和国' from dual;--该表ename列使用字符作为存储长度,成功插入记录

        Oracle数据库支持的Unicode字符集

            NLS_NUMERIC_CHARACTERS       ,

                  7369 SMITH            10100 17-DEC-100

                 ENAME                                              VARCHAR2(40)

        AL32UTF8

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

            中华人     

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

            总结:尽管服务器端NLS_LANGUAGE设置为AMERICANNLS_TERRITORY设置为AMERICA,但无须影响客户端中文的使用

    3.设定nls_territory参数

        创建见后那末被改变,仅有很少列外              都时需被改变

        设定nls_territory影响的内容          

        基于SQL函数来设定NLS参数

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

            Linguistic sorting

            PARAMETER                    VALUE

        由上可知,基于会话级别的设置优先于环境变量的设置

            TO_CHAR(HIRE_DATE,'DD.MON.YY'

             EMPNO ENAME             SAL HIREDATE

            SQL> select length(ename) from tb_c;  --计算长度(字符数)

        NLS_CHARACTERSET             AL32UTF8

  Oracle 控制文件(CONTROLFILE)

    正如前面所描述,客户端都时需使用不同于服务器端的字符集、语言环境,哪哪好多个不同字符集的转换工作则由OracleNet来负责

    一般情况报告下,要求服务器端的字符集是客户端的超集或相等,即使用相同的字符集

            SQL> show user;

                Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

        对于非ASCII码字符在导入导出到只是数据库时产生数据丢失

            TB_B_2          ENAME           VARCHAR2                 10

        由于世界各国和各个地区使用的符号的多样性,而单字节仅仅能表示个字符,好多好多 我也有使用到了多字节来表示该人不同的字符

        SQL> alter session set nls_territory='AUSTRALIA';  --保留nls_language不变,即为英语,将地区改为AUSTRALIA

            SQL> select table_name,column_name,data_type,data_length from user_tab_columns

        关于nls_languagenls_territory参数的总结

            SQL> select substrb(ename,1,9) from tb_c;--截取子串(字节数)

                NLS_LANGUAGE                 AMERICAN

    nls_instance_parameters

                NLS_TERRITORY                                 AMERICA

            Window平台,使用注册表来设定OracleNLS_LANG参数

    1.查看NLS参数

            Date and time formats

        该参数的参数值为bytechar,作用域为环境变量,初始化参数,会话级别(alter session)

            SQL> col parameter format a28

            SQL> create table tb_b(id number,ename varchar2(10));  --ename使用缺省值字节来作为存储长度

            NLS_CURRENCY                   $

            maximum: 10)

              7369 SMITH            10100 100-12-17

            LENGTH(ENAME)

                SQL> desc tb;

            SUBSTRB(ENAME,1,9)

            当导入数据到数据库时,由于源数据库字符集不同于目标数据库字符集,则源数据库字符集向目标数据库字符集转换

                SQL> col value format a35

六、字符集的哪好多个常用视图

        假定客户端使用的是Windows系统,Windows客户端使用的代码页

        基于window客户端设置NLS_LANG

        c.通用字符集,如AL32UTF8

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

                  由于服务器端使用了AL32UTF8 Unicode字符集.尽管客户端使用的字符集为ZHS16GBK.其间的转换工作则由OracleNet完成

            TABLE_NAME      COLUMN_NAME     DATA_TYPE       DATA_LENGTH

                SQL> select * from tb;                              --都时需正常显示

                        ID ENAME

            对于传统路径土辦法 ,数据基于会话指定的NLS设置来转换

            Table created.

            NLS_DATE_FORMAT              DD/MM/RR

            第二要素为territory,如示例中为France。一二要素时时需下划线连接

        Window客户端使用NLS_LANG来访问服务器,客户端使用的NLS_LANGSIMPLIFIED CHINESE_CHINA.ZHS16GBK

        Session altered.

                 ID                                                 NUMBER(38)

    Character Set:前面由于描述过,主好多好多 我用作描述字符怎么保存。

        由于NLS_LENGTH_SEMANTICS参数在客户端未设置,则该参数使用服务器端的缺省设置

Oracle 角色、配置文件

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

            [oracle@oradb ~]$ export NLS_LANG=French_France.WE8ISO8859P1  --将环境变量设定为French_France.WE8ISO8859P1

        AL16UTF8

        都时需存储列的类型为char,varchar2,clob,long      都时需存储的类型为NCHAR,NVARCHAR2,NCLOB

                PARAMETER                    VALUE

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

            第三要素为character set,如示例中为AL32UTF8 二三要素时时需小数点连接

-- Oracle 全球化行态与字符集

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

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

            b.逐个键展开(COMPUTER/HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/KEY_OraClient10g_hom1)

              7876 ADAMS            1485 23/MAY/87

                SQL*Plus: Release 10.2.0.1.0 - Production on 星期六925 12:51:52 2010

                PARAMETER                                     VALUE

            1 row created.

        NLS_LANGUAGE                   AMERICAN     --因此我设定该参数则下面的参数即可挑选

    3.数据导入导出时位于的字符集转换

        Oracle全球化行态包括

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

              2  where table_name like 'TB_%' and column_name like 'ENAME';

                NLS_NCHAR_CONV_EXCP          FALSE

    数据库的全球化行态是数据库发展的必然结果,位于不同地区、不同国家、不需要语言而使用同一数据库那末普遍。Oracle数据库提供

        实物表使用服务器端的NLS设置来决定使用的字符集

            select * from nls_session_parameters;

                Copyright (c) 1982, 1005, Oracle.  All rights reserved.

四、Oracle 字符集转换

            PARAMETER                    VALUE

                NLS_SORT                     BINARY

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

        Character Set                                  National Character Set

        NLS_LANG设定后,在客户端应用任务管理器启动时生效。当连接到服务器端时,客户端使用NLS_LANG指定的信息与

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

            NLS_DUAL_CURRENCY              $

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

    两者的比较:

    nls_session_parameters

        时需使用到诸如nchar,nvarcharUnicode字符由于时需扩展到世界各地存储不同的字符,好多好多 我辅助字符集应运而生。

              7876 ADAMS            1485 87-05-23

Oracle 冷备份

                NLS_CURRENCY                 $

        SQL> alter session set nls_territory='CANADA';   --nls_territory设置为加拿大

    查看数据使用的字符集

                  7900 JAMES          1282,5 03/12/81

            SQL*Plus: Release 10.2.0.1.0 - Production on Dim. Sept. 26 12:04:37 2010

  Oracle 表空间与数据文件

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

        SQL> select parameter,value from nls_database_parameters

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

            SQL> create table tb_b_2(id number,ename varchar2(10 byte));--ename使用显示值字节来作为存储长度

                  7900 JAMES          1282.5 03-DEC-81

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

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

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

            select * from nls_database_parameters;

            a.打开注册表(运行中输入regedit后挑选)

            NLS_SORT                     FRENCH

                NLS_DUAL_CURRENCY            $

                NLS_LENGTH_SEMANTICS         BYTE

            Table created.

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