한글이 ??? 로 DISPLAY 되는 경우(CHARACTER SET)
=============================================
Oracle Tools(SQL*Plus, Forms 30, Forms 40, Reports 20 등)을 이용하여 한글
DATA를 조회할 때 ???로 출력되는 경우 해결 방법.
DATABASE는 SQL COMMAND 'CREATE DATABASE'를 포함하는 STATEMENT를 수행할
때 만들어지는데 우리가 그 STATEMENT를 수행하기 앞서 고려해야 할 사항 중의
하나가 DB CHARACTERSET이다.
DB를 CREATE할 때 DATABSE CHARACTERSET을 명시해야만 하는데, 한번 선택되고
난 후에는 CHARACTER SET을 변경하는 것은 쉽지가 않다.
DATA DICTIONARY에 있는 DATA를 포함해서 모든 DATA는 선택된 CHARACTERSET에
의해 입출력 되기 때문에 USER가 다른 CHARACTERSET으로 ACCESS한다면 한글 데이
타가 ???로 출력된다.
또한, 분산 DB 환경이나 UPGRADE할 경우에는 DATABASE CHARACTERSET이 같아야
하므로, 사용자들은 DATABASE의 CHARACTERSET을 알아 두어야 한다.
< 현재 DATABASE 의 CHARACTERSET 확인 및 변경 >
1. 데이타베이스 CHARACTERSET 확인
$ sqldba lmode=y
SQLDBA> connect internal
SQLDBA> select * from v$nls_parameters;
PARAMETER VALUE
-------------------------- -------------------------
"... ..... "
NLS_CHARACTERSET KO16KSC5601 (or US7ASCII)
(A)
2. 환경 변수의 NLS_LANG 확인
$ env
...
NLS_LANG=American_America.US7ASCII
(B)
위의 (A)와 (B)가 동일한 경우에만 한글 데이타 처리에 문제가 없으며, 이것이
서로 다른 상태에서 한글 데이타를 조회할 경우에는 ??? 로 출력 된다.
3. CHARACTERSET을 일치시키는 방법
* NLS_LANG 환경 변수를 변경하여 일치시키는 방법
<UNIX>
Bourne shell, k-shell을 사용하는 경우 .profile을 수정한다.
NLS_LANG = American_Amerca.KO16KSC5601; export NLS_LANG
c-chell을 사용하는 경우 .cshrc 혹은 .login 수정
setenv NLS_LANG American_America.KO16KSC5601
수정 후 다시 $env를 실행하여 변경되었는지 확인한다.
<WINDOWS 3.1>
C:WINDOWSORACLE.INI 수정
NLS_LANG=American_America.KO16KSC5601
WINDOW 재기동
<WINDOWS 95>
WINDOWS 95에서는 NLS_LANG이 ORACLE.INI에 들어있지 않고
REGISTRY에 기록되므로 REGISTRY EDITOR를 이용하여 수정해야 한다.
MS DOS 창으로 나가서 REGEDIT.EXE 실행
또는
시작 -> 실행 -> regedit -> HKEY_LOCAL_MACHINE -> SOFTWARE -> ORACLE
오른쪽 마우스 버튼을 이용하여 NLS_LANG을 수정한다.
REGISTRY 변경 후에 PC를 REBOOTING 할 필요는 없습니다.
<WINDOWS NT>
WINDOWS NT 에서도 WINDOWS 95의 경우와 마찬가지로 REGISTRY에 기록된
정보를 변경해 주면 됩니다. 다음과 같이 합니다.
DOS 창에서 REGEDT32.EXE 실행
HKEY_LOCAL_MACHINE -> SOFTWARE -> ORACLE 선택
메뉴를 선택하여 NLS_LANG을 수정
* 서로 다른 character set 을 갖는 DB를 access 하는 client에서는 다음과
같은 setting 을 하면 편리합니다.
예를 들어서 SERVER의 character set이 US7ASCII이고 PC의 NLS_LANG이
American_America.KO16KSC5601과 같이 서로 다르게 설정되어 있는 경우
다음을 각 client의 환경에 추가하면 한글 문제가 해결됩니다.
ORA_NLS_CHARACTERSET_CONVERSION=NO_CHARACTER_SET_CONVERSION