- 적용방식 : 환경변수, 설치 시, 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 값 확인
댓글 없음:
댓글 쓰기