기술 정보
home
채널 소개
home

특정 문자열 데이터가 제대로 보이지 않는 경우 확인 방법

문서 유형
장애 해결
분야
관리/환경설정
키워드
CharacterSet
적용 제품 버전
5SP1FS01
5SP1FS02
5SP1FS03
5SP1FS04
5SP1FS06
6FS01
6FS02
6FS03
6FS04
6FS05
6FS06
6FS07
6FS07PS
7FS01
7FS02
7FS02PS
1 more property

현상

특정 문자열 데이터가 제대로 보이지 않는 현상 입니다.
Case 1: 조회 시에는 동일하게 보이지만 실제로는 다른 데이터가 들어간 경우
Case 2: 한컴오피스 문서 등의 내용을 AP를 통해 그대로 insert 하는 업무에서 특정 특수 문자가 제대로 보이지 않는 경우
-- 현상 예시 drop table tibero.pk_test create table tibero.pk_test(id1 varchar2(10), id2 varchar2(10), data1 varchar2(10), data2 varchar2(10)) alter table tibero.pk_test add constraint pk primary key(id1, id2) insert into tibero.pk_test values ('key1','key2',1,1) insert into tibero.pk_test values ('key1 ','key2',1,1) insert into tibero.pk_test values ('key1 ','key2',1,1) insert into tibero.pk_test values ('key1󰊱','key2',1,1) -- 깨진 문자는 한글에서 복사/붙여넣기 한 특수 문자 insert into tibero.pk_test values ('key1󰊲','key2',1,1) -- 깨진 문자는 한글에서 복사/붙여넣기 한 특수 문자 commit desc tibero.pk_test COLUMN_NAME TYPE CONSTRAINT ID1 VARCHAR(10) PRIMARY KEY ID2 VARCHAR(10) PRIMARY KEY D1 NUMBER D2 NUMBER INDEX_NAME TYPE COLUMN_NAME PK1 NORMAL ID1 ID2 select id1,id2 from tibero.pk_test ID1 ID2 1 key1 key2 2 key1 key2 3 key1  key2 --1,2,3의 데이터 차이를 눈으로 인지하기 힘들다 4 key1󰊱 key2 5 key1󰊲 key2 --4,5의 ID1 마지막 문자가 깨진 상태
SQL
복사

원인

Case 1: 공백문자(전각), 공백문자(반각), tab 문자는 전부 다른 문자이나, 조회 시 인지하기가 어렵습니다. (위 예시의 1,2,3번째 줄)
Case 2: 한컴오피스에서는 UNICODE에서 미사용 중인 주소값에 한글 전용 문자를 지정해 사용하는 영역이 있습니다. 이 경우, 한컴오피스에서는 해당 바이트 값을 읽고 해당하는 문자가 표출되나 UTF8 등에서는 미사용 영역이므로 문자가 제대로 보이지 않습니다. 미지원 문자이므로 insert 시 해당 값에 적합한 문자가 없어 제대로 출력이 안되지만, 값 자체는 가지고 있으므로 그대로 입력됩니다.
참고
사용자가 입력한 대로 그대로 들어간 케이스로, character set 은 주소 코드를 읽고 거기에 맞는 문자를 출력하는 형태입니다.

해결

오류는 아닌 character set 처리 특성으로 필요 시 to_char(rawtohex(string))으로 바이트코드를 확인해 분석합니다.
key1 이라는 값은 6B657931 라는 byte 값을 가진다 1 : E38080 = 일본어 문자셋에서 사용하는 전각 공백 문자 2 : 20 = space 3 : 09 = tab 문자 4 : F3B08AB1 = UTF8에서는 미사용 영역 / UNICODE로는 U+F02B1 으로 미사용 영역 / 한글에서는 네모칸 숫자 1로 사용. 5번과 동일해 보이지만 실제로는 다른 문자가 들어간 상태 5 : F3B08AB2 = UTF8에서는 미사용 영역 / UNICODE로는 U+F02B2 으로 미사용 영역 / 한글에서는 네모칸 숫자 2로 사용. 4번과 동일해 보이지만 실제로는 다른 문자가 들어간 상태 select id1,id2,length(id1),lengthb(id1),to_char(rawtohex(id1)) from tibero.pk_test ID1 ID2 LENGTH(ID1) LENGTHB(ID1) TO_CHAR(RAWTOHEX(ID1)) 1 key1  key2 5 7 6B657931E38080 2 key1 key2 5 5 6B65793120 3 key1 key2 5 5 6B65793109 4 key1󰊱 key2 5 8 6B657931F3B08AB1 5 key1󰊲 key2 5 8 6B657931F3B08AB2
SQL
복사