티스토리 뷰

발단

현재 사용 중인 DB는 oracle이며, 이미 생성되어 있는 테이블에 중국어 데이터를 insert 할 작업이 잡혔다.

전달받은 중국어 데이터를 insert 후 정상적으로 데이터가 적재되었는지 확인하였으나

실제 확인된 데이터는 ?(물음표)가 포함되어 있는 비정상적인 형태로 적재가 확인되었다.

 

직접 결과를 확인하며 진행하기 위해 select 쿼리 실행 후 결과를 보고 비교해보겠다.

수행 쿼리 : select '服务' from dual; 

결과 : 服?

 

이와 같이 중국어 데이터의 깨짐 현상이 보였다.

 

원인 분석

참고로 중국어, 일어 등의 유니코드를 지원하지 않는 CharacterSet을 가진 DB에서 

유니코드를 지원하기 위해 사용되는 CharacterSet으로 National CharacterSet 이 있다.

National CharacterSet 기반의 데이터 타입으로는 NCHAR, NVARCHAR2, NCLOB 이 있다.

 

작업 환경

중국어,일어 등의 유니코드를 지원하지 않는 CharacterSet K016MSWIN949를 사용

생성된 테이블 컬럼 데이터 타입은 NVARCHAR2 

 

작업환경을 보았을 때 중국어, 일어 등의 유니코드를 지원하지 않는 CharacterSet 을 사용 중이었기에

중국어 데이터가 들어갈 컬럼의 데이터 타입을 NVARCHAR2로 생성하였으나

데이터 insert는 정상적으로 되지 않았음.

 

해결

National CharacterSet 기반의 데이터 타입 컬럼에 해당 데이터 타입으로 값을 insert 하기 위해서는

값 앞에 N을 붙여줘야한다.

이는 현재 값을 National CharacterSet 데이터 타입으로 작업하겠다는 의미이다.

 

예제) Insert into TABLE_NAME values (N'服务');

 

수행 쿼리 : select N'服务' from dual;

결과 : 服务

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함