Mediawiki MySQL DB Encoding 바꾸기

Latin1으로 되어 있던 오래된 Mediawiki의 MySQL을 최근에 새로 Mediawiki를 업그레이드 하면서 MySQL의 Encoding에서 충돌이 났습니다. 정확하게는 phpMyAdmin Tool을 이용하여 Export 한  (실제로는 mysqldump를 이용했으리라 생각합니다만) SQL File이 원래 Latin1 으로 Encoding이 되어 있었는데, 받을때는 UTF-8으로 받으니 한글이 모두 깨져버렸습니다. 이것을 Backup 이라고 받아 두기도 참 어려운 점이 있기때문이기도 하고, 한글등의 영어외의 문자에 대한 지원을 위해서는 UTF-8이 필수적이기때문에 오래된 Latin1의 MySQL DB를 모두 최신 UTF-8 Encoding으로 바꾸기로 했습니다.

바꾸기로 결정을 하긴 했지만, 시간이 참 많이 걸렸습니다. 아내의 눈치를 살피면서 주말에 짬짬히 업그레이드를 했습니다.

이 글은 DB, HTML, Encoding등에 대해서 비전문가, 그러나 취미정도로 관심을 가지고 있는 사람의 입장에서 쓰여졌음을 밝힙니다.

우선 DB를 다운받고 UTF-8으로 Converting을 한 후에 다시 DB로 Upload 하여야 합니다. [1. converting mediawiki mysql database from latin1 to utf8][2. Convert database of Mysql to latin in utf-8] [3. ALTER TABLE Syntax]

저는 다음과 같은 과정을 거쳤습니다.

1. 먼저 SSH로 사이트에 접속하였습니다.
2. 다음과 같이 latin1 으로 되어 있는 DB (예; dbmysql)를 dump하여 dbmysql.sql로 받습니다.

$mysqldump --user=name --password=password --default-character-set=latin1 --skip-set-charset dbmysql > dbmysql.sql
$mysqldump --user=name --password=password --extended-insert=false --quote-names --default-character-set=latin1 dbmysql > dbmysql.sql

mysql 4.1 이후로는 DB 자체가 utf8으로 변환되어서 나올 수 있습니다. 이때는 다음과 같이만 설정하여 dump 합니다.

$mysqldump --user=name --password=password --default-character-set=utf8 dbmysql > dbmysql.sql

3. latin1으로 되어 있는 그 파일을 utf8으로 변환합니다.

$sed -r 's/latin1/utf8/g' dbmysql.sql > dbmysql-utf8.sql
perl -pi -w -e 's/latin1/utf8/g;' dbmysql.sql

3-1. 변환후 혹시 Table명을 바꾸고 싶다면, 이것도 적당한 Editor를 이용하여 일괄적으로 바꾸어 줍니다.
4. SQL을 이용하여 DB를 하나 생성합니다. (예; dbmysql2) 이때, 이 DB에는 어떤 table도 생성되지 않은 empty DB로 가정합니다.
5. 다음을 이용하여 새로운 DB에 저장합니다.

$mysql --user=name --password=password --default-character-set=utf8
dbmysql2 < dbmysql-utf8.sql
$mysql --user=name --password=password --default-character-set=utf8 dbmysql2 < dbmysql.sql

혹시 DB 자체를 UTF-8으로 바꾸기를 원한다면,[4. Converting Database Character Sets]

$mysql --user=name --password=password

로 mysql에 접속한 후에,

mysql> ALTER DATABASE MyDb CHARACTER SET utf8;

와 같이 바꾸어 줍니다.

P.S. 이전에 기록되었던 코드가 완벽하게 동작을 하지 않아서 다시 수정해 둡니다.

You May Also Like

1 Comment

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다