본문 바로가기
Oracle/아키텍쳐

Character Set 한글 테스트

by 취미툰 2020. 4. 20.
반응형

목적 : UTF8과 K016MSWIN949에서 각각 한글데이터를 넣었을때 잘 들어가는지, 잘 보이는지에 대한 테스트입니다.

 

사용 환경:

[oracle@ysbae ~]$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.5 (Maipo)

 

SYS@newysbae> select instance_name,version from v$instance;

INSTANCE_NAME    VERSION
---------------- -----------------
newysbae         11.2.0.1.0

1 row selected.

 

요약 : 서버의 캐릭터셋과 클라이언트의 캐릭터셋을 맞춰주는 것이 제일 중요합니다. 다를 시 데이터가 깨질 수 있습니다.

 

테스트 진행

 

서버 UTF8

SYS@newysbae> select * from nls_database_parameters where parameter like '%CHARACTERSET%';

PARAMETER                                                    VALUE
------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NLS_CHARACTERSET                                             UTF8
NLS_NCHAR_CHARACTERSET                                       AL16UTF16

 

클라이언트 K016MSWIN949

[oracle@ysbae ~]$ echo $NLS_LANG

AMERICAN_AMERICA.KO16MSWIN949

 

컬럼이 두개인 테이블을 생성하고 하나에는 varchar2, 하나에는 nvarchar2로 생성합니다.

TTS@newysbae> create table chartest
  2  (a varchar2(10),
  3  b nvarchar2(10));

 

TTS@newysbae> insert into chartest values('한글','한글2');

1 row created.

Elapsed: 00:00:00.03
TTS@newysbae> commit;

Commit complete.

Elapsed: 00:00:00.01
TTS@newysbae> select * from chartest;

A                    B
-------------------- --------------------
▒▒▒ꣿ                 ▒▒▒ꣿ2

 

둘다 깨집니다. 캐릭터셋이 클라이언트와 서버가 달라서 그렇습니다.

 

 

변경작업

서버의 NLS_CHARACTERSET을 클라이언트인 K016MSWIN949로 맞춰주고 다시 데이터를 삽입해봅니다.

SYS@newysbae>update sys.props$ set value$='KO16MSWIN949' where name='NLS_CHARACTERSET'
SYS@newysbae> commit;

 

후에 DB 재기동

 

TTS@newysbae> insert into chartest values('한글','한글2');

1 row created.

TTS@newysbae> commit;

Commit complete.

TTS@newysbae> select * from chartest;

A          B
---------- ------------------------------
占쎌뮄     �쒓�2
한글       한글2

2 rows selected.

 

기존에 깨진 데이터는 복구되지 않으며 클라이언트와 서버가 동일하게 캐릭터셋을 맞춰주니 한글데이터가 삽입되었습니다.

 

**테스트하다가 나온 사항인데, 캐릭터셋이 꼬인 상황에서 만든 테이블은 클라이언트와 서버가 캐릭터셋이 동일하더라도 데이터가 계속 깨져서 들어갔습니다.

반응형

'Oracle > 아키텍쳐' 카테고리의 다른 글

Oracle 21c 아키텍쳐  (0) 2021.01.22
오라클 기동,정지 절차  (0) 2020.06.12
Character Set  (1) 2020.04.20
오라클 19c 아키텍쳐 소개  (0) 2020.03.05
인덱스 스플릿(INDEX SPLIT)  (0) 2019.12.30

댓글