반응형
SQLPlus에서 한글 깨짐 원인은 오라클 서버와 클라이언트 간의 NLS_LANG 설정 문제에 영향을 받습니다.
한글이 ??? 출력되거나, 또는 깨져서 출력될 수 있습니다.
SQL> select '한글테스트' as 테스트 from dual;
?????????
---------------------------------------------
???????????????
#insert 오류
SQL> insert into scott.emp (empno, ename) values (7942,'홍길동');
insert into scott.emp (empno, ename) values (7942,'홍길동')
*
ERROR at line 1:
ORA-12899: value too large for column "SCOTT"."EMP"."ENAME" (actual: 27, maximum: 10)
리눅스에서 Client의 NLS_LANG 환경 변수를 아래와 같이 등록하면 해결됩니다. 영구 등록은 profile에 적용
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
또는 export NLS_LANG=AMERICAN_AMERICA.KO16KSC5601
위의 두개의 NLS_LANG 중에 오라클 서버의 NLS_CHARACTERSET과 맞춰 주면 됩니다.
AL32UTF8 : 유니코드를 지원하며, Oracle DBMS 기준으로는 UTF8(OLD), AL32UTF8(NEW) (**둘 다 유니코드 인코딩 방식은 UTF-8)라고 볼 수 있는데, 오라클 9i 이상 버전부터 지원 및 권장한다.
오라클 서버 NLS_CHARACTERSET 확인 & Client 환경 변수 설정
#오라클 서버 NLS_CHARACTERSET 확인 (AL32UTF8)
SQL> select * from nls_database_parameters where PARAMETER like '%CHARACTERS%';
PARAMETER VALUE
------------------------- ------------------------------
NLS_NUMERIC_CHARACTERS .,
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_CHARACTERSET AL32UTF8
#클라이언트 환경 변수 설정
$ cd ~
$ vi .bash_profile
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
#bash_profile 적용
. .bash_profile
한글 적용 확인
SQL> select '한글테스트' as 테스트 from dual;
테스트
---------------
한글테스트
SQL> insert into emp (empno,ename) values (7942,'홍길동');
SQL> select empno, ename from scott.emp order by empno desc;
EMPNO ENAME
---------- ----------
7942 홍길동
Windows의 경우 레지스트리 편집기를 열어서 (실행창 regedit 입력) 아래 유사 경로에 NLS_LANG을 편집하면 됩니다.
컴퓨터\HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\KEY_OraDb11g_home1
오라클 서버의 캐릭터 셋이 AMERICAN_AMERICA.AL32UTF8 인 경우에 Windows 클라이언트에서 아래 두 개의 NLS_LANG은 한글 지원
- KOREAN_KOREA.KO16MSWIN949 (처음부터 적용되어 있던 값)
- AMERICAN_AMERICA.KO16KSC5601 (테스트 값)
- AMERICAN_AMERICA.AL32UTF8 (쿼리 ailas 부분에 한글 미지원)
#KOREAN_KOREA.KO16MSWIN949 또는 AMERICAN_AMERICA.KO16KSC5601
SQL> select '한글테스트' as 테스트 from dual;
테스트
------------------------------
한글테스트
#AMERICAN_AMERICA.AL32UTF8 테스트
SQL> select '한글테스트' as 테스트 from dual;
select '한글테스트' as 테스트 from dual
*
ERROR at line 1:
ORA-00911: invalid character
참조
반응형