Amazon.co.jp ウィジェット

2010年5月16日

Mac MT4→MT5に伴うMYSQL4→MYSQL5への移行、文字コード化けを直す

まずは自己責任でお願いします、と最初に記述するのがいいのかな?

こんなやり方やる人いるんだろーか。
参考になるかどうかわからないけど、もしSQLの引っ越しで文字化けするなら、
まずは文字コードがデータベースの設定とMTの設定が違うということを疑うのもありかも。

ではメモ。


movabletype4からmovabletype5に移行するにあたり、データベースをMySQL4から5にしなくてはいけないということになりましたですよ。

私がMT4までの段階でやっちゃったダメなこと。

それが文字コードの設定ミス。

エックスサーバを使っているのですが、
MYSQL4の文字コードはEUC-JP。
しかし、今までMTで静的に書き出していた文字コードはUTF-8。
MYSQLをエクスポートする際に、バイナリデータで行うとそれがはっきりとわかる。

コメントがデータベースと同じ文字コードで見ると文字化けしていても、
心当たりがある文字コードをブラウザで指定して日本語部分を見ると確認とれます。
私のデータベースがEUC-JPなのに、データベースの中身はUTF8という確認は、
以下の方法でとれました。

sugoiera2.jpg


データベースの書き出しの部分は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設定で
データベースを削除して作り直さないとうまくいきませんでした。
この作業はそんなに手間じゃないんで、うまく行かなかったら、
やる価値あります。

また、インポートの途中で、真っ赤なエラー画面が出て来たら、
コードのコピペの時に失敗している可能性あり。

sugoiera.jpg

一度ファイルを開いて、検索し原因を見つけて解決しておきましょう。
これが解決したら、上記のデータベース削除→作成を行い、うまくいきました。