[MySQL] 테이블 인코딩 변경 (latin1 -> utf8)
by ming
2016-10-16
현재의 접속 환경을 알아야 한다.
한글이 포함된 테이블이 있다고 치자. (테이블명 test)
select * from test limit 1; // 한글이 잘 나와야 한다
set names latin1;
select * from test limit 1; // 변함없이 한글이 잘 나와야 한다
set names utf8;
select * from test limit 1; // 한글이 깨져 보여야 한다
자 이제 원래의 접속환경으로 되돌린다.
set names latin1;
기존 테이블을 백업한다.
create table test_bak like test;
insert test_bak select * from test;
백업 테이블의 캐릭터셋을 접속환경과 일치시킨다
alter table test_bak convert to character set latin1;
기존 테이블의 캐릭터셋을 utf8로 변경한다
alter table test convert to character set utf8;
한글이 포함된 컬럼을 업데이트 시킨다. (키컬럼이 no이고, 한글이 포함된 컬럼이 lb)
update test a join test_bak b on a.no=b.no
set a.lb = convert(b.lb using binary);
확인한다.
select * from test limit 1; // 한글이 깨져보여야 한다
set names utf8;
select * from test limit 1; // 한글이 잘나와야 한다
모든 테이블의 인코딩을 완전히 변경시켰다면
mysql의 정보 파일을 열어 utf8 환경으로 바꾸자
/etc/my.cnf 파일을 열어 아래와 같이 수정한다.
collation-server = utf8_general_ci
init-connection = 'SET NAMES utf8'
character-set-server = utf8
저장하고, mysql을 다시 시작한다
/etc/init.d/mysqld restart