티스토리 뷰
발단
현재 사용 중인 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;
결과 : 服务
'DB' 카테고리의 다른 글
oracle 서브쿼리 rownum 조회시 ORA-00904 invalid identifier 원인파악 (0) | 2022.02.24 |
---|---|
[oracle 설정] UNDO tablespace 사용량 급증 현상 해결 (0) | 2020.12.22 |
[SQL] 문자형 비교연산자 (0) | 2020.07.15 |
[oracle] SQL 리터럴 변수와 바인드 변수 (0) | 2020.07.15 |
- Total
- Today
- Yesterday
- 날짜
- jQuery
- SSL
- jaxen
- parse
- Eclipse
- mybatis
- 이벤트발생
- vscode
- web
- SpringBoot
- Windows
- btye
- Oracle
- WAS
- React
- JSON
- 깨짐
- Java
- gradle
- SQL
- Git
- 컨테이너
- spring
- docker
- html
- IMAGE
- TLS
- JPA
- Linux
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |