영카트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);
}
이렇게 되어 있는지도 확인 해 보실 필요가 있겠네요.
!-->원래사이트에 캐릭터셋이 이상하게 셋팅되어있는겁니다.
그 사이트에서 생성하고 사용할때는 이상이 없지만 옮길때는 캐릭터셋이 달라지므로 이상해집니다.
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
보통 euckr과 utf8 이외에는 국내에서 안쓰니까 두가지중 하나가 아닌건 이상한거죠.
옛날버전 mysql 은 기본설치로 하면 latin1_swedish_ci 로 설치가 됐었던거 같더라고요.
전 서버설치는 제일이 아니어서 잘 몰랐었습니다만 님과 같은 현상이 옛날 서버에서 종종 있었습니다.
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