본문 바로가기
스마트러닝/기타유용한 팁

Mysql DB 복구시 한글깨짐

by 민서아빠(과학사랑) 2013. 1. 12.

http://kldp.org/node/95722

현재 윈도우 Mysql 5.0.18 을 사용 하고 있습니다.

궁금한건 A 라는 서버에서 DB 를 백업을 받았는데 character set=euckr 로 되어 있는게 문제입니다.

문제는 B 서버는 character set =utf8 인겁니다...

B 서버는 이미 여러가지 DB를 가지고 있고 지울수 없는 상태이구요.

A서버에서 받은 DB 를 복구를 시켜봤더니... ㅠㅠ
한글이 다 깨지는겁니다.

워드패드로 열어서 보면 한글은 재대로 표시가 됩니다.
워드패드로 SET NAMES utf8 로 바꾸기도 하고
DEFAULT CHARSET=utf8; 로 바꿔보았지만... 소용없더라구요...

서버를 euckr 로 바꾼 후 복구 시킨다음 utf8 로 다시 변경하고나서
show variables like 'c%'; 를 하면

character_set_database = euckr
collation_database = euckr_general_ci

utf8 로 안 바껴 있더라구요.. ㅠㅠ

아.. 답답합니다.
방법이 없나요??

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

어떻게 하다보니 한글이 출력이 잘 되더라구요..
utf8 출력하는 php 코드가 따로 있는데 그건 검색을 좀 해봐야할 것같네요.

이 질문에 답변 주신 모든 분들 고맙습니다.
덕분에 해결이 되었네요.

귀중한 시간 쪼개서 답변 달아 주신분들 복받으세요~~~~ ^^

‹ static으로 선언된 함수를 헤더파일에 쓰면 경고가 나오네요.. 스크린의 글자를 얻어오려면... ›
» Login or register to post comments 966번 읽힘

3552
points덤프, 리스토어 시에
Submitted by dormael on 수, 2008/07/02 - 2:33pm.
1
point
덤프, 리스토어 시에 양쪽 캐릭터 셋을 맞춰 주시면 문제가 없을것 같은데요.

물론 테이블의 캐릭터 셋이 바뀌는 것이므로 테이블 생성 쿼리도 가능하면 utf8 캐릭터 셋을 지정해 주시구요.

아래와 같은 식으로 하면 되는걸로 알고 있습니다.
기본적으로 mysql 커맨드라인 툴들의 서버 접속 기본 캐릭터 셋은 latin1로 알고 있습니다.


mysqldump --default-character-set=utf8 디비명 > 파일

혹시 덤프된 테이블의 캐릭터 셋이 utf8이 아닌 경우로 지정되어 있을경우 utf8로 변경

mysql --default-character-set=utf8 < 파일

지금 조금 헷갈리는데 utf8이 아니고 원래 캐릭터 셋일 가능성도 있습니다.
둘이 다를 가능성도...

지금은 utf8만 쓰고 있어서... ㅡ,.ㅡ

»
Login or register to post comments

365
points훔.. 알려주신 방법으로 했지만... 안되네요
Submitted by 시월 on 수, 2008/07/02 - 4:08pm.
1
point
my.ini 에서 default-character-set 을 euckr 로 변경을 해야만... 한글이 재대로 출력이 되네요...

전 euckr db 를 utf8 db 로 변경을 하고 싶어서.. 질문은 한건데....

euckr -> utf8 로 한글 깨짐 없이 변경 못하나요??

그 db 용량이 50MB 좀 넘는거라 한글로 일일히 치기엔.. 너무 많은 db 라서요...

또 phpmyadmin 에서는 한글이 재대로 보이고 sqlyog 나 콘솔창에서는 한글이 한글이 깨져서 한문, '?' 이 두가지가
섞여서 나오네요...

정녕 방법은 없는건가요?

»
Login or register to post comments

3552
points지금 정확히 기억이
Submitted by dormael on 수, 2008/07/02 - 4:46pm.
1
point
지금 정확히 기억이 안나서 그러는데 우선 덤프된 텍스트 파일에서 한글이 제대로 보이는가는 신경쓰지 않으셔도 됩니다.

에디터에서 파일을 읽을때의 인코딩이나 폰트에 따라 제대로 보이지 않을수도 있기 때문입니다.

문제는 mysqldump에서의 출력 인코딩과 다른 디비에 넣을때의 인코딩이 적절한가 입니다.

우선 utf8로 덤프 넣을때 utf8이 제대로 되지 않았다면

덤프를 euckr, 넣을때 utf8로 해보시고(이게 적절한게 아닌가 생각이 됩니다.)

그래도 안된다면 테이블, 디비의 캐릭터 셋이 제대로 지정이 되어 있는지 확인해 보셔야 할 것 같습니다.

캐릭터 셋은 디비뿐 아니라 테이블, 컬럼에까지 별도로 다르게 지정이 가능하기 때문에 전체적으로 확인해 보셔야 합니다.

»
Login or register to post comments

365
points훔.....
Submitted by 시월 on 목, 2008/07/03 - 10:28am.
0
points
제가 덤프 파일을 에디더 플러스로 열어서 수정을 했거든요...

euckr 을 utf8 로 변환을 시켜서 복구도 해봤는데

mysqldump -uroot -p --default-character-set=utf8 test > test.sql

로 덤프를 하고나서 에디터 플러스로 수정

복구시에는
mysql -uroot -p --default-character-set=utf8 test < test.sql

위와 같이 했어도 한글이 깨지는건 마찬가지더라구요... ㅠㅠ

»
Login or register to post comments

3552
points한글이 깨진건 어디서 확인하신 건가요?
Submitted by dormael on 목, 2008/07/03 - 11:34am.
0
points
한글이 깨진건 어디서 확인하신 건가요?

utf8로 세팅되어 있는 다른 디비의 다른 테이블은 잘 나오는데 복구한 디비만 깨져서 나오는 건가요?

»
Login or register to post comments

365
pointssqlyog 에서 db 를 불러왔을때와..
Submitted by 시월 on 목, 2008/07/03 - 1:16pm.
0
points
sqlyog 에서 db 를 불러왔을때와 콘솔창에서 mysql -uroot -p 로 들어가서 확인 했을때 입니다.

다른 DB 쪽에는 문제가 없습니다.

다른 db는 아무 데이터가 없는 상태에서 이미 UTF8로 작업이 되어 왔던거였기 때문에
별문제가 없습니다.

복구한 db만 한글만 깨져서나오는데..
이건 ECUKR 로 되 DB에서 작업이 되오던거라서 위 경우와 다릅니다.

phpmyadmin 에서는 한들이 재대로 보이기는 합니다.

거기서는 Collation 이 euckr_korean_ci 로 나옵니다.... ㅠㅠ

»
Login or register to post comments

3552
points두
Submitted by dormael on 목, 2008/07/03 - 2:29pm.
0
points
두 클라이언트에서


show variables like 'character%';

의 결과와 혹시 괜찮으시다면 깨지는 테이블의 스키마를


show create table 테이블명

으로 확인해서 올려주실 수 있나요?

까먹었던게 있는데 밑에 분이 올려주신 코멘트 에서 4번도 확인하셔야 합니다..

»
Login or register to post comments

365
points웹서핑해서.. 자료를 찾아 돌아다녔는데..
Submitted by 시월 on 목, 2008/07/03 - 3:16pm.
0
points
설마.. 그걸 빼먹었으리라구요..

show variables like "c%" 로 할 시


+--------------------------+--------------------------------------------+
| Variable_name            | Value                                      |
+--------------------------+--------------------------------------------+
| character_set_client     | utf8                                       |
| character_set_connection | utf8                                       |
| character_set_database   | utf8                                       |
| character_set_results    | utf8                                       |
| character_set_server     | utf8                                       |
| character_set_system     | utf8                                       |
| character_sets_dir       | d:\PHP_Setup_for_IIS\MySQL\share\charsets\ |
| collation_connection     | utf8_general_ci                            |
| collation_database       | utf8_general_ci                            |
| collation_server         | utf8_general_ci                            |
| completion_type          | 0                                          |
| concurrent_insert        | 1                                          |
| connect_timeout          | 5                                          |
+--------------------------+--------------------------------------------+

위와 같이 utf8 로 되어 있습니다....

»
Login or register to post comments

3368
points여기서 검색 해 보시면 많이 나올텐데요..
Submitted by zz181321 on 수, 2008/07/02 - 4:19pm.
0
points
http://kldp.org/node/81341

이런 아티클도 있군요.

»
Login or register to post comments

365
points이 방법은....
Submitted by 시월 on 수, 2008/07/02 - 6:14pm.
0
points
구글링을 통하여 많은 정보를 보고 해봤지만 해결이 되지 않아 올렸습니다.

지금 올려주신것도 보았고 한번 실행해 봤구요...

한글폰트가 깨지는 현상은 여전합니다.

set names euckr 을 적용을 시켜야 재대로 나오더라구요

제가 재대로 실행을 못한 거일수도 있지만...

여전히 phpmyadmin 에서는 정상출력이고 콘솔 화면 및 sqlyog 는 한글이 깨집니다.

euckr 로 만들어진 DB 를 utf8 로 변환을 바라는 거였는데...

위 방법은 euckr 과 utf8 을 동시 사용인걸로 설명한것 같은데.. (제목에 나와 있어서.. -ㅁ-;;)

여튼, 다시 설명을 드리자면
현재 A 서버는 euckr 로 동작을 하고 있고 B 서버는 utf8로 동작을 하고 있는 상황입니다.

A 서버의 A라는 Database 를 백업은

mysqldump -uroot -p --default-character-set=utf8 a > a_utf8.sql
mysqldump -uroot -p a > a.sql
두가지 방법을 동원하여서 복구도 시켜 보았고...

위 DB 를 리눅에서 전송 후
iconv -c -f euc-kr -t utf-8 a.sql > a.utf8
로도 방법을 동원해 보았으며

my.ini 파일의 defualt-chracter = euckr 로도 변경 후 a.sql 를 복구 시킨 후
utf8로 변경 후에 다시 재 백업을 받아본후 다시 복구 과정을 걸쳤었고

editplus 를 통하여 백업 파일 안에 euckr 을 utf8 로 전부 바꾼 후 복구 시켜도 보았습니다.

구글링을 통해서 각종방법으로 해보았지만
해결이 되지 않아.. 제 능력밖이라 질문을 올렸는데..
역시.. euckr 을 utf8 로 변경 시 한글은 깨질수 밖에 없는 건가요?

»
Login or register to post comments

2168
pointseuckr 을 utf8 로 변경
Submitted by academic on 목, 2008/07/03 - 2:27pm.
0
points
euckr 을 utf8 로 변경 시 한글은 깨질수 밖에 없다니 당치도 않습니다.

euckr을 utf8로 변경하는 작업을 많이 했었는데, 아무런 문제 없이 utf8로 변경했었습니다.

주로 제로보드 이전 버전을 utf8로 변경하기 위해서 많이 했었죠.

아래 말씀드리는 사항은 euckr을 utf8로 변경하기 위한 제 나름대로의 팁입니다.

(utf8로 변경하는 방법은 아주 많기 때문에 아래 방법을 따르지 않아도 변환 가능하다는 점을 미리 말씀드립니다.)

1.

sql 파일을 생성할 때 4.1 버전부터는 default-character-set을 지정하지 않으면 utf8로 설정됩니다. mysqldump를 할 때 반드시 테이블의 문자셋과 동일한 default-character-set(즉 euckr)으로 지정해줘야 좋습니다.


mysqldump --default-character-set=euckr a > a.sql

2.

mysqldump로 만든 sql 파일을 iconv를 이용해 utf8로 미리 변환하는게 좋습니다.

eucKR 대신에 CP949를 쓰는게 더 좋을 경우가 많았습니다.


iconv -f CP949 -t UTF-8

3.

sql 파일에서 character set 관련 설정이 있다면 지우는게 작업이 편합니다.


CREATE TABLE `zetyx_admin_table` (
...
) ENGINE=MyISAM DEFAULT CHARSET=euckr;

위 부분을 아래처럼 바꾸면 됩니다.


CREATE TABLE `zetyx_admin_table` (
...
) ENGINE=MyISAM;

sql 파일 크기가 너무 커서 편집하기가 힘들다면 mysqldump를 할 때 스키마와 데이터를 분리해서 만들면 용량 작은 스키마 파일만 편집하면 되니 편합니다.


mysqldump --no-data --default-character-set=euckr a > a_schema.sql
mysqldump --no-create-info --default-character-set=euckr a > a_data.sql

테이블 스키마만 저장하기 위해서는 --no-data 옵션을 주면 됩니다. 반대로 데이터 insert문만 저장하기 위해서는 --no-create-info 옵션을 주면 됩니다.

4.

mysqldump를 할 때 옵션을 어떻게 줬느냐에 따라 sql 파일 내에 set names euckr이라는 부분이 들어가 있을 수 있습니다.

들어가 있다면 이 부분을 지우고

sql 파일 맨 앞에 아래 부분을 추가해주는 것이 좋습니다.


set names utf8;

5.

옮겨갈 서버 설정에 따라 불필요할 수 있습니다만, 데이터베이스를 만들 때 ut8을 명시해 주는 것이 좋습니다.


CREATE DATABASE  db_name DEFAULT CHARACTER SET utf8

데이터베이스를 만들었다면 다음과 같이 제대로 utf8로 설정되었는지 확인해보십시오.


mysql> USE db_name;
Database changed
mysql> SHOW VARIABLES LIKE '%DATABASE';
+------------------------+-----------------+
| Variable_name          | Value           |
+------------------------+-----------------+
| character_set_database | utf8            |
| collation_database     | utf8_general_ci |
| skip_show_database     | OFF             |
+------------------------+-----------------+

--
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.

»
Login or register to post comments

365
pointsㅠㅠ 여전히 깨지는듯...
Submitted by 시월 on 목, 2008/07/03 - 3:14pm.
0
points
여전히 select 로 데이터를 확인하면 援먯쑁怨쇳븰湲곗닠遺