Mac MT4→MT5に伴うMYSQL4→MYSQL5への移行、文字コード化けを直す
まずは自己責任でお願いします、と最初に記述するのがいいのかな?
こんなやり方やる人いるんだろーか。
参考になるかどうかわからないけど、もしSQLの引っ越しで文字化けするなら、
まずは文字コードがデータベースの設定とMTの設定が違うということを疑うのもありかも。
ではメモ。
movabletype4からmovabletype5に移行するにあたり、データベースをMySQL4から5にしなくてはいけないということになりましたですよ。
私がMT4までの段階でやっちゃったダメなこと。
それが文字コードの設定ミス。
エックスサーバを使っているのですが、
MYSQL4の文字コードはEUC-JP。
しかし、今までMTで静的に書き出していた文字コードはUTF-8。
MYSQLをエクスポートする際に、バイナリデータで行うとそれがはっきりとわかる。
コメントがデータベースと同じ文字コードで見ると文字化けしていても、
心当たりがある文字コードをブラウザで指定して日本語部分を見ると確認とれます。
私のデータベースがEUC-JPなのに、データベースの中身はUTF8という確認は、
以下の方法でとれました。
データベースの書き出しの部分はEUC、コメントや記事はUTF。
これを統一しなければいけない。
手順を記しておきます。
0.意外とデータの中はMTの作業のログがすごかった。
個人でやっている、検索機能をMTので使っている、分析はしないという人なら、
このログは消してもかまわないかと。
ファイルを比較すると、22MBのものがログ削除で6.7MBまで容量減らせたので。
1.まずはバイナリデータファイルを用意。
これはバックアップ。とっておきましょう。上書きしないようにね。
もう一つこのバイナリファイルをコピーしておく。
仮にこれをa_mt.sqlとしましょう。
2.ここで強引技。
Firefox(サファリは開かなかった)のウィンドウを開き、
そこに先ほど保存したa_mt.sqlを開きます。
firefoxのテキストエンコーディングを指定します。
ここでは混在の可能性があるEUC-JPを指定します。
そこで画面の文字を全てコピー。
テキストエディットで新規ファイルを作り、そこにペースト。
名前は適当に固定した文字コードにします。
3.今度はFirefoxのテキストエンコーディングをもう一つの混在である
UTF−8に指定。
そこでまた画面の文字を全てコピー。
テキストエディタで、また新規ファイルを作って、ペースト。
名前はUTFとでもしておきます。
4.mi(みみかき)で、新規ファイルを作ります。
文字コードが上プルダウンで指定できるので、今回統一したいUTF-8を指定します。
何も書いていない状態で、一度保存します。
5.ここからが大変。
3つのウィンドウが開きます。
2と3と4で作ったファイルを開くのです。
耳かきエディットでまっさらな状態のところに、
文字化けしていない方のデータをじっくり見分けながら、
文字化けしていない部分を貼付けていくのです。ああ、気が重い。
全部うまくがっちゃんこすれば、同じ行数になります。
このコピペ作業なんですが、やっていくと耳かきエディットに叱られることがある。
コードの内容が違うからうんちゃら
そして貼付けられたデータは文字化け。
そんなときは手順をそれぞれ1つ前に戻して、
何十行ではなく、数行ずつやっていってみてください。
するとどの文字が化ける原因になっているかわかります。
私の場合は、半角のカタカナ(コメントでたまにあるんです)、難読漢字、
あとは謎の全角ハイフンが文字化けの原因でした。
謎の全角ハイフンは置換で解決。
今回、おいらが編集したコードの行数は18,137行。
うげー。これから頑張る人、めげずに頑張れ。
気をつけなくてはいけないのが、最初の部分。
SQLに文字コードを教えてあげるところが上から恐らく15行目っくらいにあります。
/* SET NAMES ほにゃらら */;
このほにゃららの部分に、データベースの統一したい文字コードを書きます。
EUC-JP の場合は ujis
Shift_JIS の場合は sjis
utf8の場合は utf8
そしてSQLの5にインポートするわけですが。
phpadminを使って、一度失敗してエラー帰って来た場合は、
エックスサーバに限るのかもしれませんが、一度インフォパネルのMYSQL設定で
データベースを削除して作り直さないとうまくいきませんでした。
この作業はそんなに手間じゃないんで、うまく行かなかったら、
やる価値あります。
また、インポートの途中で、真っ赤なエラー画面が出て来たら、
コードのコピペの時に失敗している可能性あり。
一度ファイルを開いて、検索し原因を見つけて解決しておきましょう。
これが解決したら、上記のデータベース削除→作成を行い、うまくいきました。


