이번에 개발 하고 있는 녀석이 UTF-8로 만들다 보니, 몇가지 문제가 있어 서버 설정부터 완전히 UTF-8로 만들고 그 과정을 문서로 남깁니다. 참고로, 이번에 남기는 포스트가 완전 하다고 할 수 없지만 차후 필요성을 위해 남겨둡니다.
모든 파일들은 YUM으로 설치 했으면 따로 이 설정한 부분은 없습니다.
OS: Redhat Fedora core 6
Apache: httpd-2.2.3-5
PHP: php-5.1.6-3.1
MySQL: mysql-5.0.27-1
2. 설정방법 및 순서
1. apache 환경파일 편집 (httpd.conf)
2. php 환경파일 편집 (php.ini)
3. mysql 환경파일 편집 (my.cnf)
4. apache, mysql 서비스 재시작
5. mysql에서 캐릭터셋 확인 및 디비생성
6. php 소스에 한글문자열이 있으면 파일저장할때 UTF-8 파일형식으로 저장
/etc/httpd/conf/httpd.conf 에서 캐릭터셋 수정
AddDefaultCharset UTF-8
/etc/php.ini 에서 캐릭터셋 수정
;default_charset = "iso-8859-1"
default_charset = "utf-8"
/etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
##참고사항##
old_passwords=1 이부분을 그대로 두게되면 mysql 암호화 방식을
구번전처럼 사용한다는 뜻입니다. 즉 16자리 암호화죠.
신버전으로 사용하길 원한다면 저 윗부분을 주석처리 해주세요.
그럼 암호화 방식이 42자리로 늘어 보안에 훨씬 도움이 됩니다.
#old_passwords=1 <-이렇게 주석걸어 두세요~
init_connect=SET collation_connection = utf8_general_ci
init_connect=SET NAMES utf8
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci
[mysql.server]
user=mysql
basedir=/var/lib
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
붉은색 글자가 추가된 내용들이다.
환경변수를 모두 수정후 apache 및 mysql 서비스 재시작
mysql> use test
Database changed
mysql> show variables like 'c%';
+--------------------------+----------------------------+
| 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/share/mysql/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 |
+--------------------------+----------------------------+
14 rows in set (0.00 sec)
* MySql에서 데이터베이스 생성
mysql>CREATE DATABASE 디비명 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
참고로 MySQL 내용을 보면 알겠지만 MySQL-5 버전 부터는 utf-8 이 아닌 utf8로 바뀌었다.
즉 php 언어 같은 부분으로 db선택을 utf8로 하려면 아래와 같이 해야 한다.
@mysql_query("set names utf8");
아마도 mysql 버전이 5가 아니었다면
@mysql_query("set names utf-8"); 로 했을것이다.
mysql 만 utf8이며 php 와 apache 는 기존 그대로utf-8 이다.