영카트4 설치후 에러-mysql에서 뽑아내는 한글이 사이트화면에서 깨짐

영카트4 설치후 에러-mysql에서 뽑아내는 한글이 사이트화면에서 깨짐

QA

영카트4 설치후 에러-mysql에서 뽑아내는 한글이 사이트화면에서 깨짐

본문

영카트4 설치후 에러-mysql에서 뽑아내는 한글이 사이트화면에서 깨짐

 

영카트4 운영중인 사이트를 

제 테스트 서버로 복사해온후 -사이트화면상에서  ​ mysql 에서 뽑아내는 한글이 깨짐니다

 

해결법이 뭔가요? 이것때문에... 무지 고생하네요-_-;

 

(제 테스트 서버 정보)

 show variables like 'c%';

+--------------------------+----------------------------+

| Variable_name            | Value                      |

+--------------------------+----------------------------+

| character_set_client     | utf8                       |

| character_set_connection | utf8                       |

| character_set_database   | latin1                     |

| character_set_filesystem | binary                     |

| character_set_results    | utf8                       |

| character_set_server     | latin1                     |

| character_set_system     | utf8                       |

| character_sets_dir       | /usr/share/mysql/charsets/ |

| collation_connection     | utf8_general_ci            |

| collation_database       | latin1_swedish_ci          |

| collation_server         | latin1_swedish_ci          |

| completion_type          | NO_CHAIN                   |

| concurrent_insert        | AUTO                       |

| connect_timeout          | 10                         |

+--------------------------+----------------------------+

 

 

원래 사이트(영카트4 설치 사이트-현재 그 사이트에서는 잘 운영되고 있는데...)

mysql> show variables like 'c%';

+--------------------------+----------------------------------------+

| Variable_name            | Value                                  |

+--------------------------+----------------------------------------+

| character_set_client     | binary                                 | 

| character_set_connection | binary                                 | 

| character_set_database   | euckr                                  | 

| character_set_filesystem | binary                                 | 

| character_set_results    | binary                                 | 

| character_set_server     | utf8                                   | 

| character_set_system     | utf8                                   | 

| character_sets_dir       | /usr/local/mysql/share/mysql/charsets/ | 

| collation_connection     | binary                                 | 

| collation_database       | euckr_korean_ci                        | 

| collation_server         | utf8_general_ci                        | 

| completion_type          | 0                                      | 

| concurrent_insert        | 1                                      | 

| connect_timeout          | 10                                     | 

+--------------------------+----------------------------------------+

14 rows in set (0.00 sec) 

이 질문에 댓글 쓰기 :

답변 4

오랜만에 접속했는데 댓글이... ^^;;; 해결은 되셨나요?

 

phpmyadmin을 이용하거나 mysqldump를 할 때 DB는 텍스트 파일로 백업을 하게 됩니다.

에디트플러스로 sql 파일을 열어서 utf-8로 변환해서 저장하면 캐릭터셋은 문제가 없습니다.

변환해서 저장한 sql 파일로 다시 복구하면 utf-8로 저장 됩니다.

(ANSI -> UTF-8)

euc-kr에서 utf-8로 복구 할 때 제가 사용하는 방법입니다.

보여주신 새 MySQL 캐릭터셋에는 문제가 없는 거 같습니다.

 

collation_database       | latin1_swedish_ci    

이 항목은 제 서버같은 경우 utf8_general_ci로 되어 있네요. latin1_swedish_ci는 mysql 기본 설정이라 지금까지 신경 안 썼는데 지금보니 제 서버는 general로 되어 있네요.

 

텔넷 접속하셔서 mysql 들어가셔서 select 했을 때는 문제가 없나요?

만약 텔넷에서 한글이 깨진다면 서버 설정도 확인을 해 보셔야 할 듯 합니다.

아파치라면 http://ziumb.tistory.com/38 이 포스팅이 도움이 되실지 모르겠습니다.

 

일단 텔넷으로 접속하셔서 테스트로 MySQL내에서 한글이 깨진 것인지 OS와 서버프로그램(아파치) 설정에서 한글이 깨지는 것인지 원인을 파악하는 게 우선 일 듯 합니다. 

 

 

http://ziumb.tistory.com/36 예전에 쓴 포스팅을 보니 제가 서버 셋팅 할 때 my.cnf 수정했던 것도 있네요. ^^

아래 부분에 [mysqld] ~ [mysqldump]까지 설정 부분이 있는데 참고가 되실지 모르겠네요.

 

 

 

영카트4라고 하시면 언제 버전인지 모르겠네요. 혹시 common.lib.php에서 sql 관련 함수에서


// DB 선택
function sql_select_db($db, $connect)
{
    global $g4;
    if (strtolower($g4['charset']) == 'utf-8') @mysql_query(" set names utf8 ");
    else if (strtolower($g4['charset']) == 'euc-kr') @mysql_query(" set names euckr ");
    return @mysql_select_db($db, $connect);
}​

이렇게 되어 있는지도 확인 해 보실 필요가 있겠네요.

저도 혼자 독학하는 경우가 대부분이라 경험에 기반한거라 확실치는 않습니다. ^^;
phpmyadmin으로 봤을 때 한글이 깨진다면 euc-kr로 백업한 파일을 utf-8인 mysql에 복구했거나 혹은 그 반대, mysql은 utf-8인데 my.cnf에서는 euc-kr로 세팅 되었거나 설정이 없어 OS 셋팅을 따르는 경우가 아닌가 싶어요.
dump한 sql 파일을 플러스에디터로 열어서 utf로 변환하는 거 저는 추천합니다. ^^
그리고 mysql 설정에서는 utf-8로 했는데 복구하는 과정에서 개별 테이블 속성에 utf-8이 아닌 다른 캐릭터셋으로 되어 있다거나 등등. dump 할 때 옵션을 주면 create문에 끝이 " ) DEFAULT CHARSET=utf8; " 이런 문장이 들어가는데 여기서 캐릭터셋이 euc-kr로 되어 있다거나...
mysql 설정이 어찌 됐든 DB를 선택하기 전에 @mysql_query(" set names utf8 "); 이 명령은 utf8로 변환해서 읽어들이라는 의미이기 때문에 위의 명령이 잘 실행 됐는데도 한글이 깨진다면 my.cnf 설정을 바꿔보면 어떨까 합니다. ㅎㅎ
저도 크게 도움이 안 되겠지만 일단 개인적인 경험을 공유합니다.
잘 해결 되시기 바랍니다. ^^

제 테스트 서버에서 mysql 접속해서 select 문으로 해보니까... select 문 결과는 한글이안깨진다
===========================================
이것은 어떤 설정때문에 그런가요?


그냥...  dump 해온 sql 파일을 vi 로 열어보니... 한글이 깨진다..
==================================================
이것은 또 어떤 설정때문에 그럽니까?

mysql에서 select 했는데 한글이 안 깨진다는 건 캐릭터셋이 정상으로 북구 되었다는 거겠죠?
그런데 vi로 열면 한글이 깨진다는 건, vi는 리눅스 명령어이니까 리눅스 인코딩이 euc-kr인 듯 합니다.
그렇다해도 클라이언트에서 mysql을 읽어 올 때는 한글이 제대로 보여야 하는데 브라우저에서 볼 때 한글이 깨진다면 http://ziumb.tistory.com/36 여기서 my.cnf 하단에 mysql 설정이 있는데 여기서 mysql 캐릭터셋을 확인 해 볼 필요가 있는 거 같습니다.

혹시 그럴리는 없겠지만 만에 하나, 혹시라도 설치하신 영카트가 euc-kr은 아닌지, 저장한 .php나 .html 파일이 ansi로 저장 된 것은 아닌지 확인이 필요하겠네요. HTML 문서 상단에 메타태그에서 캐릭터셋이 utf-8로 되었는지 등등. 이런 경우는 mysql 뿐만 아니라 다른 한글도 깨져 보이겠죠? ^^;;;

mysql 내에서 한글이 잘 보여진다면 제 생각에는 이제 클라이언트를 점검해야 하지 않을까 그렇게 생각이 듭니다. ^^

바보천사님 감사합니다. 지금 어째어째 해서.. 돌아가는것 같네요...
아 그런데.. 다른 프로젝트는 이클립스 디버깅이 제대로 되는데
그 의뢰인님의 프로젝트만 이클립스 디버깅이 안먹어요 -_-;

원래사이트에 캐릭터셋이 이상하게 셋팅되어있는겁니다.

그 사이트에서 생성하고 사용할때는 이상이 없지만 옮길때는 캐릭터셋이 달라지므로 이상해집니다.

DB에서 덤프를 뽑을때와 DB에 집어넣을때 캐릭터 셋을 지정해주면 해결될겁니다.

 

뽑을때

/usr/share/mysql/bin/mysqldump -uroot -p --default-character-set=euckr --add-drop-table databasename > dump.sql

​집어넣을때

/usr/local/mysql/bin/mysql -uroot -p --default-character-set=euckr databasename < dump.sql

 

감사합니다. 해보겠는데요..

질문좀 ^^;

원래사이트에 캐릭터셋이 이상하게 세팅되었다고 하셨는데요
캐릭터셋이 많은데... 어느 캐릭터셋이 이상하게 세팅되었는지 좀 알려주세요^^;

아래에서 --add-drop-table 을 왜 했죠?

그냥... 저는 아래처럼 했는데... 제가 하는 방식으로도 되죠?

뽑을때
/usr/share/mysql/bin/mysqldump -uroot -p --default-character-set=euckr --add-drop-table databasename > dump.sql

보통 euckr과 utf8 이외에는 국내에서 안쓰니까 두가지중 하나가 아닌건 이상한거죠.

옛날버전 mysql 은 기본설치로 하면 latin1_swedish_ci 로 설치가 됐었던거 같더라고요.

전 서버설치는 제일이 아니어서 잘 몰랐었습니다만 님과 같은 현상이 옛날 서버에서 종종 있었습니다.

 

아래처럼 했고... 제 테스트 db서버는 설정을 바꾸지 않았습니다.
결과는 똑같은데요... 제 테스트 db서버 설정도 바꿔야 합니까?

1. dump 떠올때....
 mysqldump --default-character-set=euckr  -u USERNAME -p DB_NAME  >  dump.sql

2. 집어넣을때(제 테스트 서버에는 해당 database 가 이미 생성되게 한후에 아래를 실행)
mysql --default-character-set=euckr  -u 유저명 -p DB_NAME  < dump.sql

 

mysql을 최초 설치하면 latin1로 설치가 되기 때문에 이후 작업시에 한글이 깨지는 현상이 발생합니다.

아래처럼 my.cnf 파일을 수정해주고 재시동하면 한글 문제는 한결 편해집니다.

 

mysql utf-8 로 설정한다 

# /etc/my.cnf

[client]
default-character-set=utf8
 
[mysql]
default-character-set=utf8
 
[mysqld]
default-character-set = utf8    
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql

symbolic-links=0
innodb_file_per_table = 1
thread_concurrency = 8
query_cache_size = 32M
thread_cache_size = 8
myisam_sort_buffer_size = 64M
read_rnd_buffer_size = 8M
read_buffer_size = 2M
sort_buffer_size = 2M
table_cache = 512
max_allowed_packet = 128M
key_buffer = 384M
open_files_limit = 4000

 

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid 

 

답변을 작성하시기 전에 로그인 해주세요.
전체 123,664 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT