MySQL에 접속(sudo mysql -p)하여 MySQL에서 캐릭터셋에 대해서 조회(show variables like 'c%';)를 해보면 아래와 같이 latin1으로 나타납니다. MySQL같은 경우는 기본적으로 latin1 캐릭터셋을 사용하도록 설치가 되더군요.(이유까진 잘 모르겠습니다.)
Redmine의 디비설정 파일인 /etc/redmine/default/database.yml 에 encoding을 UTF-8로 설정을 해놓았기 때문에 MySQL의 인코딩 타입과 맞지 않아서 발생한 문제인듯 합니다. MySQL의 인코딩인 latin1으로 맞출수도 있지만 장기적으로 생각해 보았을 때는 이왕 해결할 때 UTF-8로 맞추는 것이 더 나은 해결책으로 생각되었습니다. 인코딩을 맞춰주기 위해서 일단 MySQL의 인코딩을 UTF-8로 맞추어 주어야 합니다. /etc/mysql/my.cnf 파일에서(OS에 따라 my.ini일수도 있습니다.) 각 부분에 아래의 내용을 추가해 줍니다. my.cnf에 이미 다른 설정들이 있으므로 각 부분에 맞게 추가해 주기만 하면 됩니다.
[client]
default-character-set=utf8
[mysqld]
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]
default-character-set=utf8
default-character-set=utf8
[mysqld]
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]
default-character-set=utf8
이렇게 설정하면 이제 MySQL에 관련된 캐릭터셋은 UTF-8을 사용하지만 이미 latin1으로 생성된 디비는 바꿀수가 없기 때문에 삭제후에 다시 생성해야 합니다. (디비명이 redmine이라고 가정하고 이 경우는 데이터가 전혀 없기 때문에 그냥 지우고 다시 생성하였지만 이미 사용하던 데이터가 있을 경우에는 백업하고 복구하여야 합니다. redmine디비를 사용하도록 바꾸고 캐릭터셋을 조회하면 대부분은 UTF-8로 바뀌었지만 데이터베이스 부분은 여전히 latin1로 되어 있는 것을 볼 수 있습니다.)
drop database redmine;
create database redmine COLLATE utf8_general_ci;
이렇게 다시 생성하고 다시 해당 디비의 캐릭터 셋을(use redmine후에 하여야 합니다. 디비마다 설정이 다르기 때문에)을 하면 아래처럼 모두 UTF-8로 된것을 볼 수 있습니다.
이제 UTF-8로 설정된 데이터베이스가 생겼으므로 Redmine에서 사용할 테이블과 기본적인 데이터를 생성해야 합니다. 다행히도 Ruby on Rails에는 migration기능이 들어있기 때문에 Redmine이 설치된 루트에서 아래의 간단한 명령으로 테이블 생성 및 기본데이터를 다시 추가할 수 있습니다.
rake generate_session_store
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake redmine:load_default_data
이제 redmine디비를 조회해보면 각 테이블및 데이터가 들어간 것을 확인할 수 있고 Redmine페이지에 접속해 보면 아까 깨져서 나오던 한글데이터들이 모두 정상적으로 출력되는 것을 확인할 수 있습니다.
Ubuntu나 CentOS 설치후에 MySQL의 'latin1'에서 'utf8'로 기본 설정을 바꾸는 것이 제일 먼저 하는 작업이라 정말 귀찮아요,,
다른거 설치하기 전에 그것부터 했어야 했는데 잘 몰랐어요. ㅎㅎㅎ
MySQL은 왜 UTF-8이 기본이 아닌지 모르겠뇽. ㅠㅠ