2009년 8월 24일 월요일

Using Globalization Support

  • 적용방식 : 환경변수, 설치 시, session, function
  • 주의 : parameter 무시할 것 (과거버전 호환성 때문에 존재)
    • Alter session set ~~ : 가능
    • Alter system set ~~ : 불가능
  • 확인 : v$nls_parameters
  • 넣을 수 있는 값 : v$nls_valid_values

   

▣ Character Set

▶ Single-byte character sets

  • 7-bit => 2^7 => 128 => 영어까지 해결
  • 8-bit => 2^8 => 256 => 유럽어까지 해결

▶ Multibyte character sets, including Unicode

  • 2byte => 2^16 => 64K 개 => 상용 한글 수
    • Ex) ko15mswin949
  • 4byte => 2^32 => 4G 개 => 현존 모든 글자수
    • Ex) al32utf8

   

▣ Windows CharacterSet 변경

   

파라미터에서 확인하면 value가 비어있지만 실제 view로 확인하면 비어있지 않다는 것을 알 수 있다.

   

S SYS> desc v$nls_valid_values

Name Null? Type

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

PARAMETER VARCHAR2(64)

VALUE VARCHAR2(64)

ISDEPRECATED VARCHAR2(5)

   

S SYS> desc v$nls_valid_values

Name Null? Type

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

PARAMETER VARCHAR2(64)

VALUE VARCHAR2(64)

ISDEPRECATED VARCHAR2(5)

   

S SYS> select count(*) from v$nls_valid_values;

   

COUNT(*)

----------

494

   

S SYS> select count(distinct PARAMETER) from v$nls_valid_values;

   

COUNT(DISTINCTPARAMETER)

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

4

   

S SYS> select distinct PARAMETER from v$nls_valid_values;

   

PARAMETER

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

CHARACTERSET

SORT

TERRITORY

LANGUAGE

   

S SYS> select distinct parameter,count(*) from v$nls_valid_values

2 group by parameter;

   

PARAMETER COUNT(*)

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

CHARACTERSET 247

SORT 87

TERRITORY 96

LANGUAGE 64

   

   

   

▣ Unicode

  • AL32UTF8 : 32는 늘어날 수 있는 최대값을 뜻함
  • AL16UTF16 

                                <AL32UTF8>                                         <AL16UTF16>   

    ※ Encoding : 숫자와 문자 변환

   

▣ Client와 Server간 캐릭터 셋이 맞지 않는다면?

  • 맞추면 되나 재설치 필요
  • 차선 : nchar, nvarchar, isqlplus(브라우저에서 자동변환)

   

▣ Database Character sets and National Character Sets

Database Character Sets

National Character Sets

Defined at creation time

Defined at creation time

Cannot be changed without re-creation, few exception

Can be exchanged

Store data columns of type CHAR,VARCHAR2,CLOB,LONG

=> nls_characterset

Store data columns of type NCHAR,NVARCHAR2,NCLOB

=> nls_nchar_characters

Can store varying-width character sets

Can store Unicode using either AL16UTF16 or UTF8

   

▣ Specifying Language-Dependent Behavior

   

   

▣ Language-and Territory-Dependent Parameters

Parameter

Default values

NLS_NANGUAGE

NLS_DATE_LANGUAGE

NLS_SORT

AMERICAN

AMERICAN

BINARY

NLS_TERRITORY

NLS_CURRENCY

NLS_DUAL_CURRENCY

NLS_ISO_CURRENCY

NLS_DATE_FORMAT

NLS_NUMERIC_CHARACTERS

NLS_TIMESTAMP_FORMAT

NLS_TIMESTAMP_TZ_FORMAT

AMERICA

$

$

AMERICA

DD-MM-RR

.,

DD-MON-RRHH.MI.SSXFF AM

DD-MON-RRHH.MI.SSXFF AM TZR

▶ 확인 : V$NLS_VALID_VALUES

▶ 설정 : EX) ALTER SESSION SET "PARAMETER" = "DEFAULT VALUES"

 

▣ Searching and Sorting

Binary sorting : Sorted according to the binary values of the encoded characters

S SYS> ALTER SESSION SET NLS_SORT=BINARY;

   

Session altered.

   

S SYS> SELECT fr_word FROM words

2 ORDER BY fr_word;

FR_WORD

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

gelex

gele

gelee

gele

   

Multilingual linguistic sorting

  • Based on the ISO standard (ISO 14651), and the Unicode 3.2 Standard for multilingual collation
  • Ordered by the number of strokes, PinYin, or radicals for Chinese characters

       

    S SYS> SELECT fr_word

    2 FROM words

    3 ORDER BY NLSSORT(fr_word,'NLS_SORT=FRENCH_M');

    FR_WORD

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

    gele

    gele

    gelee

    gelez

   

▣ Case- and Accent-Insensitive Search and Sort : 대소문자, 악센트 무시

Specify the linguistic name

NLS_SORT=<NLS_sort_name> [_AI | _CI]

Examples

NLS_SORT=FRENCH_M_AI => M : Multi language

NLS_SORT = XGERMAN_CI

   

▣ Implicit Conversion Between CLOB and NCLOB : 자동 ( 이유 : 명시적 변환이 되지 않기 때문에 )

   

▣ Globaliztion support Features

  • Language support
  • Territory support
  • Character set support
  • Linguistic sorting
  • Message support
  • Date and time formats
  • Numeric formats
  • Monetary formats

※ 기타 셋팅 : lbuilder 사용해서 값 얻음. dbca나 alter session 문 사용

   

S SYS> r            한국어 지원하는 캐릭터 셋

1  select parameter,value from v$nls_valid_values

2* where parameter='CHARACTERSET' and (value like '%KO%' or value like '%UTF%')

PARAMETER            VALUE

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

CHARACTERSET         CL8KOI8U

CHARACTERSET         CL8KOI8R

CHARACTERSET         KO16KSC5601    =>     old 한 unix 계열에서 사용, nlssort 함수 사용

CHARACTERSET         KO16DBCS

CHARACTERSET         KO16KSCCS

CHARACTERSET         KO16MSWIN949     =>     windows 전용, binary sorting 사용

CHARACTERSET         AL24UTFFSS

CHARACTERSET         UTF8

CHARACTERSET         UTFE

CHARACTERSET         AL32UTF8      =>      unicode 계열의 characterset, binary sorting 사용

CHARACTERSET         KO16KSC5601FIXED

PARAMETER            VALUE

CHARACTERSET         KO16DBCSFIXED

CHARACTERSET         AL16UTF16      =>      unicode 계열의 characterset, binary sorting 사용

   

=>  설치전 nls_lang 설정시 사용한다.

binary sorting 사용하는 이유 : binary정렬, 문자 언어 정렬이 같음(nlssort 함수 필요 없음) 반대로 KO16KSC5601은 같지 않음

   

▶ 참고 NLS_LANG : 영어, 독어 알파벳 순서 같지만 영어, 러시아어 알파벳 순서 다름 

nls 관련 셋팅값은 방대함

  ↓↓↓↓↓

S SYS> select to_char(sysdate,'day') from dual;

TO_CHAR(SYSDATE,'DAY')

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

thursday

S SYS> select * from v$nls_parameters where parameter='NLS_DATE_LANGUAGE';

PARAMETER            VALUE

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

NLS_DATE_LANGUAGE    AMERICAN

S SYS>

S SYS> alter session set NLS_DATE_LANGUAGE='KOREAN';

Session altered.

S SYS> select to_char(sysdate,'day') from dual;

TO_CHAR(SYSDATE,'DAY')

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

???

S SYS> alter session set NLS_DATE_LANGUAGE='FRENCH';

Session altered.

S SYS> select to_char(sysdate,'day') from dual;

TO_CHAR(SYSDATE,'DAY')

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

Jeudi

S SYS> select to_char('123456789','9,999,999,999,999,999L') from dual;  =>  현재 프랑스로 셋팅되어 있지만 $로 표시 => 지역 셋팅과 통화는 따로 설정해야 한다.

TO_CHAR('123456789','9,999,999,9                                              

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

                    123,456,789$

   

S SYS> alter session set nls_currency='EURO';

Session altered.

S SYS> select to_char('123456789','9,999,999,999,999,999L') from dual;

TO_CHAR('123456789','9,999,999,9

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

                 123,456,789EURO

   

양이 방대하기 때문에 검색하기 어렵기 때문에 lbuilder 사용한다.(GUI에서 사용한다)

▶ lbuilder : 새로운 나라, 언어가 생겼을 때 이를 적용하기 위함

        -> 기존값 보여줌(완전히 새로운 것은 없음. 즉 수정해서 만들어라)

         -> 모르는 나라와 언어의 적용을 위한 nls 값 확인

   

   

   

   

   

댓글 없음:

댓글 쓰기