현상
Tibero Client를 통해 DB에 접속하거나 SQL 스크립트를 실행하는 과정에서 한글이 깨지는 현상이 발생할 수 있습니다. 인코딩 문제 발생 시 확인이 필요한 사항과 조치 방안에 대하여 안내 합니다.
원인
한글이 깨질 경우 원인 및 확인 사항
1. DB Character Set
2. Terminal encoding
3. TB_NLS_LANG
4. 스크립트 파일의 encoding
참고
DB가 MSWIN949라면 스크립트를 euc-kr로 지정합니다.
(MSWIN949랑 동일하게 한글을 2바이트로 처리)
해결
DB CharacterSet 확인
데이터 베이스의 캐릭터 셋을 확인합니다. (NLS_CHARACTERSET)
$ tbsql sys/tibero
SQL> SELECT * FROM DATABASE_PROPERTIES WHERE NAME LIKE '%NLS%';
NAME VALUE COMMENT_ST
------------------------- ---------- ----------
NLS_CHARACTERSET UTF8
NLS_NCHAR_CHARACTERSET UTF16
2 rows selected.
SQL
복사
Terminal encoding 확인
DB CharacterSet과 접속한 Terminal encoding이 다를 경우 한글 깨짐 현상이 발생합니다.
DB | TERMINAL | 출력 내용 |
MSWIN949 | UTF8 | 한글 깨짐 |
MSWIN949 | EUC-KR or use font encoding | 정상적으로 한글 출력 |
TB_NLS_LANG 환경 변수 설정 (tbdsn.tbr )
•
DB CharacterSet과 Terminal encoding를 맞추기 어렵다면 tbdsn.tbr 파일에 TB_NLS_LANG 로 인코딩을 지정합니다.
•
접속한 Terminal encoding을 TB_NLS_LANG로 설정하여 DB에게 사용 중인 터미널의 인코딩 정보를 전송합니다.
DB | TERMINAL | TB_NLS_LANG | 출력 내용 |
MSWIN949 | UTF8 | UTF8 | 정상적으로 한글 출력 |
스크립트 파일의 encoding 확인
insert할 스크립트의 파일 인코딩을 확인합니다.
1) vi 편집기에 한글이 깨질 경우
vi 편집기 들어간 후 ESC > :set encoding=utf=8 입력 후 사용
SQL
복사
또는 설정 변경
$ vi /etc/vimrc
set encoding=utf-8
set fileencodings=utf-8,cp949
SQL
복사
2) insert할 스크립트 파일의 인코딩 변경
f: 기존 인코딩
- 현재 인코딩 확인
$ file tmaxkorean.sql
tmaxkorean.sql: UTF-8 Unicode text
- 인코딩 종류 확인
$ iconv -l | grep {인코딩종류}
- 인코딩변환
$ iconv -f {기존인코딩} -t {변경인코딩} tmaxkorean.sql > t.sql
$ iconv -f utf-8 -t EUCKR tmaxkorean.sql > t.sql
SQL
복사