MySQL4.1 で dump ファイルが文字化けした際の対処法
先日、シーブレインのサイトをリニューアルいたしました。
見た目の変更もさることながら、
内部的には MT を随所に組み込み、
更新のし易いサイトへと変貌を遂げました。
ぜひ一度ご訪問ください。ぜひぜひ。ぜひ。
さて。
MT を使う際に、MySQL を使用しました。
MySQL のバージョンは 4.1。
ここでピンときた方も多いと思いますが、
MySQL の 4.1 は文字コード関係でいろいろと問題があります。
いろいろと苦労したのでその旨を書き記しておこうと思います。
クライアントさまの DB はきちんと設定して使っていましたが、
自分の所の DB は特に何もせずデフォルトのままで使用していました。
MySQL の 4.1 は、デフォルトで使用すると、
ほとんど全ての文字コードが「latin1」となります。
しかし、その状態でバックアップをとろうと mysqldump を行うと、
「latin1」をなぜかむりやり「utf-8」に変更しようとして、
がっつり文字化けを起こします。
ということで、MySQL4.1 で mysqldump を行う場合、
「default-character-set」を指定してやる事が必要となります。
mysqldump --default-character-set=binary "テーブル名" > "ファイル名"
今回、いい機会なので DB の文字コードを
utf8 に統一しようと目論みました。
流れとしては、
DB の dump ファイル取る → DB の文字コードの設定を変更 → リストア
という形を取ります。
ということで早速行動開始したわけですが、
大きな間違いとして、「mysqldump」を走らせる際に
「default-character-set」の設定をしなかったのです。
そのまま my.conf に
[mysqld]
default-character-set=utf8
skip-character-set-client-handshake
と記述し、mysql を再起動しました。
(コレで基本的にはいろいろな問題は解消します)
そして先ほどの dump ファイルをリストアッ!
したら、ばっちり文字化けしてしまっています。
あらーと思ってdumpファイルを覗いてみたら、中でもやっぱり文字化け。
ふふん、まあサクッと設定を戻せば問題なかろう。
てなわけで my.conf を元に戻してもう一度 mysql を再起動。
……?
文字化けしたまんま!
ぎゃああ!どんな文字コード指定してリストアしてもダメ!
念のためもう一度 dump しても同じ!
みんなのブログが!血と汗と涙とその他の結晶が!
全部わけのわからん文字列に!
う、うろたえるんじゃあないッ!
とまあ、ここまでが前置なわけですが(長い)、
デフォルト設定の MySQL4.1 から
「default-character-set」を付け忘れて
mysqldump をしてしまい、化け化けになってしまった場合の対処法です。
秀丸などの「latin1」に対応したテキストエディタでで開く
↓
文字コードを「latin1」に変更し、一旦保存する
↓
文字コードを「utf8」に変更して開きなおす
これで文字化けは解消されているはずです。
その後は「utf8」にするなり「ujis」にするなりお好きにどうぞ。
ということで、教訓です。
dump ファイルを作るときは文字コード指定!
mysqldump --default-character-set=binary "テーブル名" > "ファイル名"
使用する前に my.conf の設定!
[mysqld]
default-character-set=utf8
skip-character-set-client-handshake
もし文字化けしてもうろたえないッ!
秀丸などの「latin1」に対応したテキストエディタでで開く
↓
文字コードを「latin1」に変更し、一旦保存する
↓
文字コードを「utf8」に変更して開きなおす
てことで。
やれやれだぜ。
参考にさせていただきました
[MySQL] 文字化け問題を本気で直す
すごくわかりやすいです。