설명
MySQL 5.x 대에서 기본적으로 생성되는 DB의 문자코드는 'latin1'입니다. 이 경우 한글 쿼리로 작업시 원하는 결과가 출력되지 않습니다. 이 경우 기존 데이터의 경우 백업받아 utf8 코드 형태로 전환해야 합니다.
요약
1. 데이터베이스 문자 코드 확인
2. 기존 데이터베이스 백업, 새 데이터베이스 생성
3. 백업 데이터 수정(euckr 또는 utf8)
4. 백업 데이터 복구
5. MySQL 환경설정(my.cnf) 파일 수정
1. 데이터베이스의 문자코드를 확인합니다.
확인하는 방법은 MySQL에 클라이언트로 접속해서
mysql > show variables like 'c%';
설치 후 MySQL 설정(my.cnf 등)을 바꾸지 않았다면 'latin1'로 맞춰져 있습니다.
2. 기존 데이터베이스를 백업합니다.
리눅스 터미널에서
다른 DB 명이라면 디비를 새로 받들면 되지만 같은 이름의 DB명을 써야한다면 삭제를 해야합니다.
MySQL에 클라이언트에서 DB를 만듭니다.
3. 백업받은 데이터를 수정합니다.
MySQL로 접속하는 클라이언트의 문자코드에 따라 달리 처리해 줍니다.
euckr을 사용한다면 SET NAMES latin1; 을 찾아 latin1을 utf8로 바꿉니다.
혹시 모르니 latin1 이란 이름으로 한번 찾기를 해본 후에
1,$s/latin1/utf8/g 로 파일 전체의 문자열을 바꿉니다.
4. 백업데이터를 복구합니다.
5. MySQL 환경설정(my.cnf) 파일을 수정합니다.
우분투 : /etc/mysql/my.cnf
레드햇5 엔터프라이즈 : /etc/my.cnf
[client]
default-character-set=utf8
[mysqld]
init_connect=SET collation=utf8_general_ci
init_connect=SET NAMES utf8
default-character-set=utf8
character-set-server=utf8 # 새 DB 생성시 character-set 옵션 없을시 기본값
collation-server=utf8_general_ci
각 [] 항목별로 추가해줍니다.
재기동 합니다. 택1..
# /etc/rc.d/mysql restart <-- BSD 계열
# /etc/init.d/mysqld restart <-- 리눅스 계열
이와는 별개로 utf8 과 euckr을 혼용해서 쓰는 방법도 있습니다. 지금은 대부분 euckr에서 utf8로 갈아탄 상황입니다만 필요한 경우 다음을 참고 합니다.
[참고글]MySQL UTF-8,EUC-KR 같이 쓰는 경우 캐릭터셋 문제 해결
요약하자면,
1. my.cnf 파일의 설정을 바꿉니다.
character_set_server=euckr <-- 새로 DB 생성시 기본값, 주로 쓰는게 utf8이라면 utf8로 지정합니다.
init_connect=SET names binary <-- 이 부분 추가
2. 디비 백업 또는 전체 디비 백업(mysqldump -A)합니다.
3. 백업 데이터 수정합니다.
3.1 캐릭터셋이 하나라면 건너 뛰어도 무방합니다.
3.2 여러 캐릭터셋 사용시 DB 생성 부분에 캐릭터셋을 수정합니다.
단, 위의 character_set_server 에서 지정한 캐릭터셋으로 DB를 만들기때문에 다른 캐릭터셋으로 할 DB만 수정합니다.
원래:
CREATE DATABASE /*!32312 IF NOT EXISTS*/ ctest-euc-kr;
(..생략..)
CREATE DATABASE /*!32312 IF NOT EXISTS*/ ctest-utf-8;
(..생략..)
수정:
CREATE DATABASE /*!32312 IF NOT EXISTS*/ ctest_euc_kr;
(..생략..)
CREATE DATABASE /*!32312 IF NOT EXISTS*/ ctest_utf_8 CHARACTER SET utf8;
(..생략..)
3.3 DB 별로 백업받았다면 하나씩 DB를 만들면서 charset을 지정해 줍니다.
4. DB를 복구합니다.
DB에 따라 다르게 지정할 수도 있습니다.
mysql -p --default-character-set=utf8 < dump.sql
UTF-8 데이터베이스라도, 해당 디비 세팅을 euc-kr 로 하면 해당 디비는 euc-kr 로 보입니다.
ALTER DATABASE `디비` DEFAULT CHARACTER SET euckr COLLATE euckr_korean_ci
ALTER TABLE `테이블` DEFAULT CHARACTER SET euckr COLLATE euckr_korean_ci
등의 명령어로 바꾸실 수 있고, phpMyAdmin 의 "테이블 작업" 탭에서도 가능합니다.
데이터베이스가 골라진 상태에서 "테이블 작업" 탭을 누르면 데이터베이스의 캐릭터셋을,
테이블이 골라진 상태에서 "테이블 작업" 탭을 누르면 테이블의 캐릭터셋을 바꿀 수 있습니다.
이 캐릭터셋이 제대로 지정되지 않은 경우엔 정렬이나 글자 수 때문에 문제가 생길 수 있으니 주의하세요.
---------------------------------------------------------------------
여기까지입니다. kldp 자료가 날아 갈까해서 옮겨놨습니다. 좀더 자세한 사항은 링크를 참고하면 됩니다.