DB

Oracle 캐릭터셋, VARCHAR2, NVARCHAR2 정리

Lawmin 2012. 11. 23. 10:58

select * from sys.props$ where name IN

 ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET', 'NLS_LANGUAGE');

NAME VALUE$ COMMENT$
NLS_NCHAR_CHARACTERSET AL16UTF16 NCHAR Character set
NLS_LANGUAGE AMERICAN Language
NLS_CHARACTERSET KO16KSC5601 Character set

UTF8: 공통 size*3byte
AL16UTF16: 공통 size*2byte
KO16KSC5601: 한글 size*2byte, 영문 size*1byte

VARCHAR2 vs NVARCHAR2 : VARCHAR2는 LENGTH 계산시 byte 수로 계산, NVARCHAR2는 캐릭터셋에 맞게 논리적인 글자수로 계산 (개별 캐릭터셋 지정 가능)

LENGTH, LENGTHB 에 따른 차이가 나는 이유는 캐릭터셋 때문

SELECT  NC, LENGTH(NC) NC_LEN, LENGTHB(NC) NC_BLEN,

        LENGTHB(C) C_LEN, LENGTHB(C) C_BLEN,
        lengthb('각'),lengthb('A'),
        lengthb(TO_NCHAR('각')),lengthb(TO_NCHAR('A'))
FROM    CHAR_TEST
WHERE LENGTHB(C) = 17;

NC NC_LEN NC_BLEN C_LEN C_BLEN LENGTHB('각') LENGTHB('A') LENGTHB(TO_NCHAR('각')) LENGTHB(TO_NCHAR('A'))
안녕하세요.HI中國 10 20 17 17 2 1 2 2