세이박스

MySQL 5.x 설치후 기존 utf8 자료 이전시 한글 깨짐 증상 해결 my.cnf 수정

데이타베이스

Aapache 2.x, PHP 5.x, MySQL 5.x 설치후 서버 이전을 끝내고 사이트 접속해보니 한글이 모두 ㅁㅁㅁ 특수기호들로 깨져 버리더군요.
원인을 알아 보니 mysql 기본 설치시 기본 문자셋이 utf8이 아니라서 생긴 문제 이더군요.
웹소스는 utf8 이며 기존 DB 자료 역시 utf8인데 mysql 기본 문자셋은 다른 문자로 되어 있어서 생긴 문제 였습니다.
다행이도 해결 방법이 mysql 다시 설치 하는 것이 아니라 /etc/my.cnf MySQL 설정 파일만 수정해 주면되었습니다.


자신의 기본 문자셋이 어떻게 되어 있는지 확인 해 보실려면 mysql 접속후 다음과 같이 확인 해 보세요!

mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |

이와 같이 latin1 등의 문자셋으로 설정 되어 있음을 확인하실 수 있습니다.

설정파일 수정은 /etc/my.cnf 파일을 수정 하시면 되며, 각 [항목] 바로 아래에 문자셋 설정을 추가 해주시면 됩니다.

# vi /etc/my.cnf

[client]
default-character-set=utf8

[mysqld]
init_connect='set names utf8'
character-set-server=utf8
default-collation=utf8_unicode_ci
skip-character-set-client-handshake
character-set-filesystem=utf8
default-character-set=utf8

[mysqldump]
default-character-set=utf8

[mysql]
default-character-set=utf8

위와 같이 추가하고 저장후 mysql 데몬을 다시 실행 해 보시면 아래와 같이 문자 기본셋이 변경 되었음을 확인 하실 수 있습니다.

+--------------------------+----------------------------------------+
| Variable_name            | Value                                  |
+--------------------------+----------------------------------------+
| character_set_client     | utf8                                   |
| character_set_connection | utf8                                   |
| character_set_database   | utf8                                   |
| character_set_filesystem | binary                                 |
| character_set_results    | utf8                                   |
| character_set_server     | utf8                                   |
| character_set_system     | utf8                                   |
| character_sets_dir       | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+

사이트 접속해보니 이제 정상으로 한글이 보이는 군요.
등록 및 수정 등 쿼리 전송시 한글 처리는 잘되는지 아직 안해봤음 ^^


 ▶ 최신영화, 최신 미국드라마 무료 다운로드... 

PHP 제로보드 이미지 한글 파일명 업로드 깨짐 엑박 되는 현상

웹프로그램
 
제로보드에서 이미지 업로드시 파일명이 한글로 되어 있는경우 엑박 (깨짐) 처리 되는경우를 방지 하기 위해 아예 파일명을 숫자로 변경해버리는 방법입니다.
 
수정파일 : write_ok.php
 
수정위치 :
이미지 파일이 업로드 2개까지 가능하니 두군데 적용.
 
 
// 디렉토리를 검사함 <=== 검색 해보시면 두군데가 있을겁니다.
 
   // 디렉토리를 검사함
   if(!is_dir("data/".$id)) {
    mkdir("data/".$id,0777);
    @chmod("data/".$id,0706);
   }
 
위 코드 다음 줄에 아래와 같이 등록해주시면 됩니다.
 
1. 첫번째 위치
 
   // 디렉토리를 검사함
   if(!is_dir("data/".$id)) {
    mkdir("data/".$id,0777);
    @chmod("data/".$id,0706);
   }
 
   // 파일명이 한글인 경우 날짜로 변환
   $temp=explode(".",$s_file_name1);
   $file_name_1=$temp[0];
   for($i=0;$i<strlen($file_name_1);$i++) {
    if(ord($file_name_1[$i])>0x80) {
     $temp1=explode(".",$s_file_name1);
     $s_file_name1 = $reg_date."1.".$temp1[1];
     break;
    }      
   }
 
2. 두번째 위치
 
   // 디렉토리를 검사함
   if(!is_dir("data/".$id)) {
    mkdir("data/".$id,0777);
    @chmod("data/".$id,0706);
   }
   
   $temp=explode(".",$s_file_name2);
   $file_name_2 = $temp[0];
   for($i=0;$i<strlen($file_name_2);$i++) {
    if(ord($file_name_2[$i])>0x80) {
     $temp=explode(".",$s_file_name2);
     $s_file_name2 = $reg_date."2.".$temp[1];
     break;
    }      
   }

PHP + ajax 한글깨짐

웹프로그램
echo 하는 페이지에서 아래와 같이 harset 을 정의
<?PHP
header("Content-Type: text/html; charset=KS_C_5601-1987");
header("Cache-Control:no-cache");
header("Pragma:no-cache");
echo "한글깨짐오류";
?>