IT감각

[Oracle/Java] 한글 몇 Byte지? 비교 LENGTHB(), VSIZE(), LENGTH() length(), getBytes("EUC-KR").length getBytes("UTF-8").length NLS_CHARACTERSET : KO16MSWIN949

dobioi 2023. 6. 5. 14:55
반응형

한글이 몇바이트지? 해서 찾아보다가 다음 정보를 확인할 수 있었다.

 

인코딩 설정에 따라서 한 글자당 바이트수가 달라지는 걸 확인하고서 찾아봤다. 일단 오라클 DB에서는 이렇게 세팅되어 있으니, 이걸 기준으로 확인하면 될 것 같다.

 

NLS_CHARACTERSET : KO16MSWIN949

 

* KO16KSC5601, KO16MSWIN949, EUR-KR : 한글 한 글자 2바이트

* UTF8, AL32UTF8 : 한 글자 3바이트

 

그래서 실재 등록된 데이터의 크기를 확인해본다.

먼저 ORACLE DB 에서...

 

SELECT LENGTHB(THIS_NM), THIS_NM FROM TB_THIS
WHERE THIS_ID = 'JASON LEE';

 

LENGTHB(THIS_NM) THIS_NM
--------------------------------  ----------------
                              6      이재수

 

SELECT VSIZE(THIS_NM), THIS_NM FROM TB_THIS
WHERE THIS_ID = 'JASON LEE';

 

VSIZE(THIS_NM) THIS_NM
--------------------------------  ----------------
                              6      이재수

 

SELECT LENGTH(THIS_NM), THIS_NM FROM TB_THIS
WHERE THIS_ID = 'JASON LEE';

 

LENGTH(THIS_NM) THIS_NM
--------------------------------  ----------------
                              3      이재수

 

각각 컬럼의 한글 길이를 구별할 수 있다. 그래서 제대로 파악해서 비교해야 할 것이다.

 

300x250

 

JAVA에서는 어떻게 비교할 수 있을까?

 

outputVo.thisNm.length();
=> 3

 

outputVo.thisNm.getBytes("EUC-KR").length;
=> 6

 

outputVo.thisNm.getBytes("UTF-8").length;
=> 9

 

각각 길이가 다르게 표시되는 걸 확인할 수 있었다. 그래서 한글 사용할 때는 기준을 잘 적용해서 확인해야 하는 것이겠다. 단순히 몇 글자인지를 체크하려면 length()로 확인할 수 있고, 캐릭터셋으로 구분해서 길이를 확인하려면 getBytes("EUC-KR").length, getBytes("UTF-8").length 를 사용해서 구별할 수 있다.

 

 

SELECT * FROM NLS_DATABASE_PARAMETERS;

 

 

PARAMETER                  VALUE

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

NLS RDBMS VERSION : 19.0.0.0.0

NLS_NCHAR CONV EXCP : FALSE

NLS_LENGTH_SEMANTICS : BYTE

NLS_COMP : BINARY

NLS_DUAL_CURRENCY : $ 

NLS_TIMESTAMP_TZ_FORMAT : DD-MON-RR HH.MISSXFF AM TZR

NLS_TIME_TZ_FORMAT : HH.MI.SSXFF AM TZR

NLS TIMESTAMP_FORMAT : DD-MON-RR HH.MI.SSXFF AM

NLS_TIME_FORMAT : HH.MI.SSXFF AM

NLS_SORT : BINARY

NLS_DATE_LANGUAGE : AMERICAN

NLS_DATE_FORMAT : DD-MON-RR

NLS_CALENDAR : GREGORIAN

NLS_NUMERIC_CHARACTERS : .,

NLS_NCHAR_CHARACTERSET : AL16UTF16

NLS_CHARACTERSET : KO16MSWIN949

NLS_ISO_CURRENCY : AMERICA

NLS_CURRENCY : $

NLS_TERRITORY : AMERICA

NLS_LANGUAGE : AMERICAN

 

728x90