database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 5138 게시물 읽기
No. 5138
기존 사용자는 한글문자셋 사용을 어떻게 해야되는 것인지요?
작성자
김일권(yosiah)
작성일
2004-01-03 13:45
조회수
2,906

기존 레드헷 8.0 에서 pgsql 을 사용하던 사람이입니다.

/usr/local/pgsql/bin/initdb -D -E EUC_KR /pgsql/data

으로만 설정을 해서..

기존 데이타베이스에

김상기님의 set client_encoding 방법을 도입하려고, 하는데...

어떻게 해야 되는지, 기존 자료에 미치는 영향은 어떨지...

발만 동동 구르고 있습니다.

어떻게 해야되는지 조금 가이드를 부탁드립니다.

글을 보아서는 계속 인코딩 쿼리를 먼저 날려주어서 처리해야 할 것도 같은데..
데이타베이스 자체의 인코딩 값부터 설정하는 것도 있을 것이고,
아니면 다시 데이타베이스 생성후에 만들어야 할 것 같기도 하고,

김상기님의

/usr/local/pgsql/bin/initdb \
--locale=ko_KR.eucKR
--lc-collate=C \
-D /pgsql/data \
-L /pgsql/share \
-E EUC_KR

설정으로 다시 설치부터 다시 해야 되는 것인지...

테스트할 시스템도 부족하고, 사실 무엇을 어떻게 해야되는지 감이 잘 잡히지 않습니다.

약간의 안내를 부탁드립니다.

새해 복 많이 받으십시요. ^^--

이 글에 대한 댓글이 총 2건 있습니다.

euc-kr 문자셋으로 되어있는 자료를 어떻게 unicode 자료로 옮기는 것인가? 이놈이 문제의 핵심인데요.

 

개략적으로는 이렇습니다. (쉘 작업입니다)

shell$ pg_dump old_db > old_db

shell$ iconv -f cp949 -t utf8 old_db > old_db.utf8

shell$ createdb -E unicode newdb

shell$ psql newdb < old_db.utf8

----------------

이렇게 하면 비교적 간편하게 DB의 인코딩을 바꿀 수 있지요.

문제는!

SQL_ASCII 인코딩을 사용했던 DB나 euc-kr에서 wchar.c 파일 해킹해서 사용했던 DB일 경우에, uhc(cp949) <-> unicode로 변환이 되지 않는 자료가 있을 수 있습니다. 이놈들을 먼저 찾아서 적당히 수정해 주어야한다는 것이지요.

 

이곳 DSN 작업때는 그런 문제가 4건 밖에 발생하지 않았는데, 제가 일하고 있는 곳에서는 오래된 자료가 많아서인지, 거의 수백건이 넘었습니다. 이것을 일일히 찾아서 고쳐주어야한다는 것이 번거로운 일이지요. 그냥 무시할 요량이라면, perl이나, python으로 간단하게 스크립트를 하나 만들어서 변환되지 못하는 문자가 나타나면 무조건 '?' 문자로 바꾼다는 식의 처리하시면 될 듯싶습니다.

주의 하셔야할 것은 euc-kr 과 unicode와의 문제가 아니라, uhc(cp949)와 unicode의 변환문제입니다. 유념해 두시길.

 

참고로 DSN 작업을 할때 사용했던 제가 쓴 python 코드를 아래에 복사해 두겠습니다.

 

#!/usr/bin/python2
import sys;
reload(sys)
sys.setdefaultencoding('cp949')
fh = open(sys.argv[1]);
all = fh.readlines();
fh.close();
i = 1;
for s in all:
        try:
                s = unicode(s);
                s = s.encode('cp949');
        except UnicodeError, x:
                print "%d Line: %s" % (i, x);
        i += 1;

 

사용자의 오타로 인한 글자가 깨어진 경우를 감안해서 일일히 그 문제의 글자가 들어있는 해당 줄을 보여주도록 하는 스크립트입니다. 그래서 편집기를 열어서 그 줄로 가서 바르게 고치든지 포기를 하든지는 사용자가 선택할 수 있겠끔.

 

이 작업은 시스템이 여러개 있어야할 이유도 없고, 전문지식이 필요한 것도 아니거든요.

김상기(ioseph)님이 2004-01-04 23:51에 작성한 댓글입니다.

전 좀 다른 방법으로 해결했습니다.

 

sql_ascii 방식으로 백업 받고,(물론 백업받을때 -d 옵션을 넣었습니다)

 

psql로 접속해서 set client_encoding = 'uhc' 하고

 

\i 백업된 파일

 

이렇게 하니 잘 들어가더군요.

 

물론, 그 이전에 db는 유니코드로 생성되어 있어야 합니다.

이상호(search5)님이 2004-01-05 01:29에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
51427.4.x 대로 자료 옮길 때의 참고 [1]
김상기
2004-01-06
1753
5141fmgr_info: function 1952435: cache lookup failed [1]
이은주
2004-01-05
1947
5140VARBIT 데이타형에 대해서 설명좀 부탁드립니다. [4]
초보자
2004-01-04
1881
5138기존 사용자는 한글문자셋 사용을 어떻게 해야되는 것인지요? [2]
김일권
2004-01-03
2906
5137jdbc로 update문 실행할때 가끔씩 update가 안되네요....
장현식
2004-01-02
2203
5136count(*) 를 sid 쿼리로 하면 않되나요?
pgsql초보
2004-01-02
2505
5133[질문]win2000Pro, win2000Server에서 서비스등록??? [1]
황남주
2003-12-30
3143
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다