Character set 이 맞지 않아 한글이 깨져 ?로 표시 된다 당혹감을 감출 수 없음..
Character Set은 각 나라는 영의 ASCII영역 뒤에 추가적인 바이트를 추가하는 방식으로 사용 한다고 한다
주로 한글은 2Byte, UTF8은 3Byte를 가진다고 한다
그러므로, 같은 ASCII문자로 구성하더라도 다른 값을 가르키거나 없기 때문에 ?가 나오는 것이다.
먼저 NLS_CHARACTERSET 을 확인 해보았다
select * from nls_database_parameters where parameter ='NLS_CHARACTERSET';
이제 sysdba로 들어가 아래와 같이수행해준다.
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL> ALTER DATABASE OPEN;
SQL> ALTER DATABASE CHARACTER SET KO16MSWIN949;
alter database character set ko16mswin949
*
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set
==> 잘 수행하다 이런 에러가 뜬다.
찾아보니 새로운 캐릭터 셋은 반드시 기존 캐릭터 셋이여야만 한다고 한다.
무슨 말인고 하니 아래 표를 참조하면 알 수 있다.
(자세한 내용 : http://cafe.naver.com/mudong.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=548)
기존 캐릭터 셋 |
새로운 캐릭터 셋 |
변경 가능 여부 |
US7ASCII |
KO16KSC5601/KO16MSWIN949/UTF8/AL32UTF8 |
가능 |
KO16KSC5601 |
KO16MSWIN949 |
가능 |
KO16MSWIN949 |
UTF8 |
불가능 |
UTF8 |
AL32UTF8 |
가능 |
SQL> ALTER DATABASE CHARACTER SET INTERNAL_USE KO16MSWIN949;
SQL> SHUTDOWN IMMEDIATE
SQL> STARTUP
SQL> SELECT * FROM nls_database_parameters where parameter = 'NLS_CHARACTERSET';
다시 조회 해보자
?????????????????????????????????????????????????????????????????????
한글로 됐다..............
캐릭터셋이 변경되면서 유실됐나보다 다시 데이터를 넣고 조회해보니
깔끔하게 나왔다!
'Study Note > Database' 카테고리의 다른 글
DDL (0) | 2016.02.04 |
---|---|
DML (0) | 2016.02.04 |
SUB QUERY (서브쿼리) (0) | 2016.02.04 |
JOIN (0) | 2016.02.04 |
집합 연산자 (0) | 2016.02.04 |