文字化け解消!


前回の日記で「~」が「?」に文字化けすると書いてた件、無事に解決しました。原因がわかれば実は大した事ではなかった…。以下、同じような失敗をした人のために覚え書。

サイトを別のサーバに移す際にMySQLも文字コードをEUCからUTF-8に変えたんだけど、そのやり方が中途半端だったみたい。

と言う感じのやり方だった。
これで「show variables like "char%";」で文字コードがUTF-8になっていたので、これでUTF8に移行完了だと思ってた。

…が、一つ問題があった。dumpしたデータは確かにUTF8なのだが、テーブル作成のSQL文に「このテーブルの文字コードはEUC」と設定されていた。いや、これも新しいサーバにリストアしたときにUTF8に変えている。が、よく考えるとリストアした後にUTF8に変えただけだ。
つまりUTF8に変える前にリストアしたテーブルのカラムはEUCで保存されているのである。現に新しいサーバのデータをmysqldumpで取ったら、

DROP TABLE IF EXISTS `modx_active_users`; CREATE TABLE `modx_active_users` ( `internalKey` int(9) NOT NULL default '0', `username` varchar(50) character set ujis NOT NULL default '', `lasthit` int(20) NOT NULL default '0', `id` int(10) default NULL, `action` varchar(10) character set ujis NOT NULL default '', `ip` varchar(20) character set ujis NOT NULL default '', PRIMARY KEY (`internalKey`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Contains data about active users.';

「character set ujis」という文字が。つまるところ中途半端にUTF-8にして中身はEUCだったという_| ̄|○
解決法としてdumpしたファイルの中で「character set ujis」を片っ端から削除して再度リストアした。すると今度はちゃんとUTF8化されたようで「~」も文字化けしなくなった。

結局は自分のやり方がダメだったわけですが…。でもこの中途半端な状態で「~」が化けるってのも少し不思議。UTF8の「~」文字からEUCの「~」へのマッピングは特に問題ないような気も。逆だったら色々問題ありそうっぽい(ネットで調べた限り)。
どうでもいいけど「~」って「波ダッシュ(wave dash)」が正式名称らしい。普段は「にょろ」か「波線」だよね。

作成日:2007/02/20 03:06:02
トラックバック
TrackbackURL:このページのトラックバックの受付は終了しています。

トラックバックはありません。
コメント
※コメントスパムが届くようになったので投稿を中止しました。