前回、データベースをUnicode(UTF-8)化しないといけないことがわかり、
ずっと放置していたUnicode化の勉強をしてみました。
準備として、MT3.xのデータベース変換の際に、
BOT投稿の迷惑投稿データや ログデータ(投稿ログ、システムログ)が
残っていると、変な文字化けを起こして
うまくインポートできないことがあります。
まずは、作業前に、ログと迷惑投稿を
MTの管理画面で消しておくことをオススメします。
基本手順としては、以下の3手順。
1)いったん現在のデータベースをテキストにダンプ
2)ダンプデータを テキストエディタ(わたしはEmEditorを使用)でUTF-8に変換
3)新規のデータベースに、UTF-8に変換したダンプデータをインポート
簡単そうに見えますが、意外に落とし穴がいろいろあって大変でした。。
以下、備忘録に。
まず、MySQL4.1で旧来のデータベースを使っていると、
デフォルト設定では ダンプ時にUTF-8で無理矢理変換されて
文字化けしたダンプデータができあがります。
これではまったく使えないデータになるので、
ダンプ時は、旧コードのlatin1でダンプさせます。
/etc/my.cnf に下記を記述して、MySQLを再起動します。
[mysqldump]
default-character-set = latin1
そして既存データベース"movabledb"を、"movabledb.dump"へ
ダンプします。
mysqldump -u user -p movabledb > movabledb.dump
ダンプした"movabledb.dump"をエディタで確認して、
文字化けをしていないかを見ます。
次に、ダンプデータ上に
「/*!40101 SET NAMES latin1 */;」 などの『latin1 』の記述がある箇所があるので、
置換で『latin1 』を『utf8』に置き換えます。
問題がなさそうならば、エディタでUTF-8コードで
"movabledb-utf8.dump"として保存をかけます。
次にサーバ側をUTF-8化しておきます。
/etc/my.cnf に下記を記述します。
[mysqld]
default-character-set=utf8
#PHPでの文字化け回避:サーバーの文字コード設定をクライアントでもそのまま使う
skip-character-set-client-handshake
[mysql]
default-character-set = utf8
[mysqldump]
# latin1にしていた設定を直します
default-character-set = utf8
記述が終わったら、
MySQLを再起動し、
MySQLにログインしてMySQLのキャラクタコードを確認します。
mysql -u user -p
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/
|
+--------------------------+----------------------------+
こうなっていればOK。
新規に殻のデータベース"movabledb-utf8"を作成して、
先ほどUTF-8化したダンプデータをインポートします。
mysql -u user -p movabledb-utf8 < movabledb-utf8.dump
特にエラーなく終了すれば、完了デス。
あとは、MT3.xのデータベース参照先をを、
mt-config.cgiをいじって "movabledb-utf8"に変えておきます。
"mt-config.cgi"の記述変更
ObjectDriver DBI::mysql
Database movabledb-utf8
DBUser user
DBPassword *******
DBHost localhost
MT3.xの管理画面から、サイトを構築して、
Unicode環境へ移行完了ヽ|・∀・|ノ
道のりは険しいですが、やってみるとちょっとした充実感、ありますね。
さて次はMT4環境移行をリベンジしてみよう~っと。