데이타 임포트시 한글 깨짐문제 - 캐릭터셋 설정

리눅스/MySQL|2015. 1. 16. 10:44
반응형

[문제]
1. 엑셀로 모든 데이타를 준비해두었다.
2. mysql dataktma폴더에 csv파일로 저장을 했다.
3. csv파일과 동일한 구조의 member테이블도 만들어 두었다.
4. load data infile 'member.csv' into table member fields terminated by ',';
5. 임포트는 잘되었는데 select로 긁어보면 한글이 깨져보인다...


[해결]
1. 벨 짓 다 해본다.
2. 엑셀에서 내보낼때 dbf 형식으로 내보낸다. -> 그래도 안된다.
3. MyDB 툴을 써서 임포트 해본다. -> 이래도 안된다.
4. SQLGate에서 임포트 해본다(엑셀 그대로,csv형태로,ddbf형태로) -> 이래도 안된다
5. 혹시나 싶어 울트라에디트에서 끝줄 공백 없애본다. -> 소용없이 안된다.
6. character set 변수를 확인해본다(my.ini파일) -> 이상없이 "euckr"로 설정돼 있다.
7. 데이타베이스 사랑넷(database.sarang.net)에서 한글깨짐 검색을 해본다.
8. 마침내 의미 있는 정보를 얻는다. 
( show variables명령어를 통해서 보니까 character set 관련 변수가 굉장히 많은게 아닌가?
- character_set_client : euckr
- character_set_connection : latin1
- character_set_database : latin1
- character_set_results : euckr
- character_set_server : latin1


하여간 보니깐 위 처럼 중간중간 "latin1"이라는 캐릭터셋이 설정돼 있는게 아닌가?
바로 저거다 싶어서 어떻게 저것들을 바꿀 수 있는지 검색한다.

9. alter database명령어로 바꿀 수 있음을 알게 된다.
10. alter database ktma default character set euckr;
이상하게 위 명령어는 안먹힌다. 따라서 변수별로 아래 명령어를 날려준다.

mysql> SET character_set_client = euckr;
mysql> SET character_set_results = euckr;
mysql> SET character_set_connection = euckr;
명령어를 때린다.
11. 엑셀에서 csv파일로 저장한다.
12. load data infile 'member.csv' into table member fields terminated by ',';
명령어를 때린다.
13. 결과를 확인한다....빠샤빠샤~ 됐다...됐어...그럼 그렇지 짜식~ 지가 안되고 배겨??ㅋㅋㅋ

[ 06-08-23 추가 ]
처음 xp에 mysql을 설치할때 캐릭터셋에 관해서는 환경설정 시에 "euckr"을 기본으로 설정해서 설치했다.
그런데 도스창에서 실행해보면 이상하게도 디폴트로 "latin1"이 설정이 되는게 아닌가?

C:>mysql -u chang -p kimchpekr 하고 로긴한 후에
mysql>show variables like 'character%'; 명령어로 환경변수를 보면....
여러가지 캐릭터 셋이 "latin1"으로 설정이 되는게 아닌가?

이 상태에서
mysql>set character_set_connection=euckr;  명령어를 통해 캐릭터셋을 변경하면 세션 중에만 반영이 되고, 로그아웃 후에 다시 들어와보면 처음과 같이 된다.

결국 캐릭터셋을 바꾸는 set명령은 세션 생성할때마다 해주어야 하는 번거로운 절차가 아닐 수 없다.
다만, 클라이언트로 접속하기 전 명령줄에 아래와 같이 하면 로긴 후에 5개 정도의 set명령을 한 번으로 줄일 수는 있다.

C:>mysql -u chang -p kimchpekr --default-character-set=euckr --skip-character-set-client-handshake

그렇다면 sql데이타를 임포트하는 경우 한글이 깨진다면 아래와 같이 생각해야 한다...
생성된 sql 파일의 캐릭터셋과 집어 넣고자 하는 mysql서버 캐릭터셋이 다르기때문에 그런 문제가 생기는 것이다.

이 문제는 이렇게 해결할 수 있다.

C:>mysql -u chang -p kimchpekr < backup.sql 로 명령해서 한글이 깨진다면....

C:>mysql -u chang -p kimchpekr --default-character-set=euckr < backup.sql 이 명령으로 해결할 수 있다.

즉, 임포트시에 euckr로 캐릭터셋을 맞추고 집어 넣으면 된다.

[ 06-11-24 추가 ]
위와 같은 방법으로 해도 에러가 난다. 그래서 다른 방법으로 해봤다.

1. 덤프할때의 절차가 중요하다.
기존에는 호스팅 회사에서 제공해주는 phpmyadmin을 통해서 sql파일을 만들어 저장하고, 옮길 서버로 업로드 시키고, ssh쉘을 통해서 임포트 명령을 주는 절차를 따랐는데

2. 이번에는 모든 작업을 ssh쉘에서 진행해봐싸.
ssh쉘에서 덤프 명령을 통해 sql파일을 만든다. 그 파일을 임포트 할 디비가 있는 서버로 옮긴 뒤 역시 ssh쉘을 통해 임포트할 서버로 로그인 한 뒤에 그 안에서 임포트 명령을 했다.

이랬더니 한글 깨짐 현상이 없더군...ㅠ.ㅠ


출처 : http://www.localhost.co.kr/v4/bbs/board.php?bo_table=DB_3_MYSQL&wr_id=8

반응형

댓글()