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 6330 게시물 읽기
No. 6330
깨진 한글 덤프시 구분자(TAB 문자) 깨짐 현상?
작성자
장효순(icastone)
작성일
2005-09-21 08:32
조회수
2,541

예전 자료를 옮기다 보니 아래와 같은 문제가 발생 했는데...

마땅한 해결책이 없어 이렇게 글을 올립니다.

 

필드가 30개쯤 되는 table이 있고 그중 몇개의 필드가 varchar로 되어 있습니다.

예를 들어

 

addr varchar(30) 이라 field 가 있다고 했을때

자료 입력시 맨끝 한글이 째져 들어간 자료가 있습니다.

 

select 시 아래와 같이 나오네여.. 아마도 맨 끝자가 한글이였는데

필드의 길이가 짧아 한바이트가 끊겨 들어간 것으로 보입니다.

에혀. 먼짓을 했길래.. 자료가 이지경인지.. ㅜㅜ

 

충북청주시상당구탑동51번지삼덕아파트410?

 

이 자료를 덤프 받으면 위 자료 뒤의 구분자인 tab 문자가 끊겨진 한바이트로 인해

제대로 나오지 않습니다. 그래서 restore 시 에러가 나네여..

 

덤프는 아래와 같이 받았습니다.

pg_dump -a -t table_name db_name > temp.dump

 

충북청주시상당구탑동51번지삼덕아파트410?TAB이름TAB성별

원래는 이렇게 나오는 것이 정상인데..

충북청주시상당구탑동51번지삼덕아파트410? 이름TAB성별

이런 식으로 구분자가 없어져.. restore시 에러가 납니다.

 

INSERT 구분 형식으로 dump를 받으면 될거 같기도 한데..

자료가 100만건이 넘어 INSERT 시키는데.. 꽤 오래 걸리거 같아.. ㅜㅜ;;

 

현재 버전은 7.1을 쓰고 있고

server, client encoding 모두 SQL_ASCII 입니다.

 

마땅한 해결책이 없을런지...?

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

대략 난감한 상황이네요.

왜 SQL_ASCII를 썼을까요? 아마도 오라클 7을 썼던 사람이 만들었나보네요.

더 좋은 방법이 있을지 모르겠지만 저라면 간단한 프로그램을 짜서 덤프 파일을 교정하도록 하겠습니다.

덤프받은 파일을 탐색하면서 한글의 두번째 바이트가 TAB문자이면 그 글자의 첫 바이트를 지우는 프로그램이죠. 간단히 작성하실 수 있을겁니다.

제가 알기로 EUC-KR은 한글의 두 바이트 모드 8번째 비트가 1이어야 하는 것으로 알고 있습니다.

박성철(gyumee)님이 2005-09-21 09:41에 작성한 댓글입니다.

일단, 문제의 컬럼이 하나라면, 비교적 쉽습니다.

 

일단 덤프를 Primary Key와, 그 문제의 칼럼

이렇게 두개의 컬럼만 덤프 받습니다.

 

그리고, 프로그램을 하나 만듭니다.

완성되지 않는 한글을 짤라버리는, 아니면, 특정 글자로 바꾸는, 아니면, 사용자에게 어떻게 바꿀지 물어보게 하는 프로그램을 만듭니다.

 

만드는 알고리즘은, 그 문제의 문자열을 utf-8 같은 unicode로 변환했다가 다시, euc-kr로 바꾸는 방식을 사용하면 괜찮을 것 같네요.

python 같은 놈은 이 과정에서 "어디서 문제가 발생했다는 오류"를 알려주거든요. 이것을 참고로 적당한 작업을 하면 됩니다.

 

다음, 수정된 자료를 기준으로 일단 기존 자료를 update 하고, 다시 전체를 덤프 받아서 옮기면 될듯합니다.

 

----------

글쓰는 과정에서 잠깐 생각난 것이,

같은 7.1대 버전이라면

 

create table table2 (pk int, addr varchar(31) ;

select pk, addr into table2 from table ;

update table2 set addr = addr || ' ';

 

이렇게 덤프 받아도 급한대로 해결할 수는 있겠네요.

 

----------

근본적인 해결책은 미완성된 한글에 대한 처리를 누군가가 언젠가는 해야한다는 것입니다. :)

 

김상기(ioseph)님이 2005-09-21 11:58에 작성한 댓글입니다.

감사합니다.  ^^

답변주신걸 참고해서.. python으로 프로그램 하나 짜서

돌리니.. 한 300건 정도.. 문제가 있는 data 가 있네여..

 

상기님 말씀대로 깨진 한바이트를 없앤다고 근본적인 문제가

해결 되는 것은 아니니..

이참에.. 까짓 300건.. 제가 보고 고쳐야져.. 머 ㅠㅠ

 

두분 다 답변 감사드립니다. ^^

장효순(icastone)님이 2005-09-21 19:21에 작성한 댓글입니다.
이 댓글은 2005-09-21 19:21에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
6333시간 함수에 관련해서 질문 드려요 [1]
알려주세요
2005-09-23
1996
6332limit 쓸때 0,10 이 안먹히는 이유는? [2]
2005-09-21
2237
6331$pg_close($connect); 의 쓰임새 [3]
초보
2005-09-21
1679
6330깨진 한글 덤프시 구분자(TAB 문자) 깨짐 현상? [3]
장효순
2005-09-21
2541
6328pg_fetch_array 함수에 대해 문의 드립니다. [2]
질문자
2005-09-20
1709
6324read int not null default '0' => 잘못된 구문인가요? [10]
아흑
2005-09-16
2394
6320Function 인수제한 어떻게 늘리죠? [1]
조성배
2005-09-15
1629
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다