기술 정보
home
채널 소개
home

Character set (캐릭터셋) 관련 이슈 확인 사항

문서 유형
기술 정보
분야
관리/환경설정
키워드
character set
charset
aix
encoding
jdbc
locale
적용 제품 버전
6FS04
6FS05
6FS06
6FS07
6FS07PS
7FS01
7FS02
7FS02PS

개요

캐릭터셋(Character set)이 제대로 확인되지 않을 경우, 확인 가능한 항목들에 대하여 서술합니다.

방법

terminal encoding 확인

DB Character set 조회

아래 예시와 같이 대만어가 캐릭터셋에서 지원하는 문자인지 조회합니다.
SQL> select * from sys._vt_nls_character_set; CHARACTERSET_NAME NCHAR_CHARACTERSET_NAME ----------------- ----------------------- EUCTW UTF16
SQL
복사

리눅스 locale 확인

locale은 사용자 인터페이스에서 사용되는 언어, 지역 설정, 출력 형식 등을 정의하는 문자열입니다.
# 지원하는 locale 리스트 조회 $ locale -a C POSIX EN_US.UTF-8 EN_US KO_KR.UTF-8 KO_KR en_US.8859-15 en_US.ISO8859-1 en_US.UTF-8 en_US ko_KR.IBM-eucKR ko_KR.UTF-8 ko_KR
SQL
복사
# 현재 설정되어 있는 locale 확인 $ locale LANG=ko_KR.UTF-8 LC_COLLATE=ko_KR.UTF-8 LC_CTYPE=ko_KR.UTF-8 LC_MONETARY=ko_KR.UTF-8 LC_NUMERIC=ko_KR.UTF-8 LC_TIME=ko_KR.UTF-8 LC_MESSAGES=ko_KR.UTF-8 LC_ALL=ko_KR.UTF-8
SQL
복사

TB_NLS_LANG 확인

TB_NLS_LANG는 클라이언트에서 사용하는 캐릭터셋입니다. 지정하지 않을 경우, 데이터베이스의 기본 문자 집합이 사용됩니다.
$ echo $TB_NLS_LANG UTF8
SQL
복사

대상 테이블 dump 확인

dump 파일을 통해 문자열이 실제로 어떤 바이트 값으로 저장되어 있는지 확인 가능합니다.
SQL> select dump([컬럼명]) from [테이블명];
SQL
복사
사용 예시
SQL> select dump(c2) from t302494; DUMP(C2) ---------------------------------- NULL Len=1: 63 Len=1: 63 Len=1: 63 NULL Len=1: 63 Len=1: 63 NULL NULL Len=1: 63 Len=1: 63 Len=1: 63 NULL NULL
SQL
복사
참고
참고로, Len=1: 63  은 Len=1 → 데이터 길이가 1바이트, 63 → 아스키 코드값 63 을 의미합니다. 내부에서 1바이트를 차지하여 아스키 코드값 63에 해당되는 문자를 저장하고 있다는 의미 입니다.

JDBC 입력 시, 데이터의 캐릭터셋 깨짐 현상 해결 방안

DBC 통해 입력 시 인코딩 문제 발생할 경우, java 컴파일 후 insert 나 update 된 데이터의 캐릭터셋이 깨진다면, 인코딩 설정해서 확인합니다.
$ javac -classpath [jdbc jar 경로] [JAVA 파일명] -encoding utf-8
SQL
복사
예시
--- Tibero 6 $ javac -classpath .:$TB_HOME/client/lib/jar/tibero6-jdbc.jar IMS236665.java -encoding utf-8 --- Tibero 7 $ javac -classpath .:$TB_HOME/client/lib/jar/tibero7-jdbc.jar IMS236665.java -encoding utf-8
SQL
복사

vi 편집기로 입력 후 저장/재오픈 시 인코딩 문제 해결 방안

vi 편집기로 입력 후 저장/재오픈 시에 인코딩 문제가 발생하는데, 터미널이나 LINUX 설정엔 문제가 없을 경우, file encoding을 확인합니다.
$ file -i [파일명]
SQL
복사
예시
$ file -i example.txt example.txt: text/plain; charset=utf-8
SQL
복사

DB version별 지원하는 charactorset 목록 확인

Character set name는 티베로 캐릭터셋이며, Equivalent Oracle Charset name은 호환 가능한 오라클 기준 캐릭터셋 입니다.
$ tbboot -C Available character set list Charset name Equivalent Oracle Charset name AR8ISO8859P6 AR8ISO8859P6 AR8MSWIN1256 AR8MSWIN1256 ASCII US7ASCII CL8ISO8859P5 CL8ISO8859P5 CL8KOI8R CL8KOI8R CL8MSWIN1251 CL8MSWIN1251 EE8ISO8859P2 EE8ISO8859P2 EL8ISO8859P7 EL8ISO8859P7 EL8MSWIN1253 EL8MSWIN1253 EUCKR KO16KSC5601 EUCTW ZHT32EUC GB18030 ZHS32GB18030 GBK ZHS16GBK IW8ISO8859P8 IW8ISO8859P8 JA16EUC JA16EUC JA16EUCTILDE JA16EUCTILDE JA16SJIS JA16SJIS JA16SJISTILDE JA16SJISTILDE MSWIN949 KO16MSWIN949 RU8PC866 RU8PC866 SJIS SJISTILDE TH8TISASCII TH8TISASCII UTF16 AL16UTF16 UTF8 AL32UTF8 VN8VN3 VN8VN3 WE8ISO8859P1 WE8ISO8859P1 WE8ISO8859P15 WE8ISO8859P15 WE8ISO8859P9 WE8ISO8859P9 WE8MSWIN1252 WE8MSWIN1252 ZHT16BIG5 ZHT16BIG5 ZHT16HKSCS ZHT16HKSCS ZHT16MSWIN950 ZHT16MSWIN950 Available nls_date_lang set list AMERICAN BRAZILIAN PORTUGUESE JAPANESE KOREAN RUSSIAN SIMPLIFIED CHINESE THAI TRADITIONAL CHINESE VIETNAMESE
SQL
복사
참고
운영체제 AIX 이슈로 인해 캐릭터셋이 깨지는 특이 케이스가 있습니다.
AIX에서 DB 캐릭터셋이 euc-tw (대만어)일 경우, jdbc class 파일 수행 시 linux에서는 정상 수행되고 AIX 에서는 캐릭터셋이 깨지는 현상입니다. aix ibm jdk 버그로 인해 euc-tw 인코딩 바이트 변환을 기대했으나 ISO-8859-1 인코딩 되어 깨진 것으로 확인되었습니다.