MySQLの闇 文字コードlatin1 | ライタス株式会社
とあるホスティングに構築しているMySQLを、システム構築込みで業者さんにリプレースを丸投げすることになり、その手伝いをするハメに陥っております。
ソレぐらい何とかしろよ・・・・
ファイルを開いてみて、UTF-8で開けたら出来上がりです。
インポートするときは、CHARSET=latin1 となっているところを、utf8に変更するのをお忘れなく。
文字列置換は、以下のコマンドでもできます。
とりあえず、ダンプファイルを引き渡して、うまくいくことを祈ります・・・
担当さんが、現在とっているバックアップを、そのまま業者さんに渡したら、
「文字化けしているので、文字化けしていないデータを下さい」
と言われたらしく、なんとかしてほしいと頼まれてしまいました。
私、MySQLは専門外なんですけど。・゚・(ノ∀`)・゚・。
しかも、本番リリースが翌週頭に(ry って感じなので、特急作業となりました。
さて、調べたところ、現在のデータベースの文字コードはlatin1という文字コードで作られているようでした。(調べる方法は以下)
> show variables like 'character_set%';
どうやら、latin1で作られている領域に、無理やりUTF8の文字コードのデータを突っ込んでいるようでして、
この風習は結構昔からあるみたいです。(今思えば無茶苦茶です なんで動くんだ・・・?)
ダンプしたファイルは、そのままではインポートできないらしく、結構困ったちゃんです。
最近は、ちゃんとUTF8がサポートされているようなので、作成時点で気がつけば、
大丈夫なんでしょうが、今回みたいなマイグレーションでは、ひどい目にあう確率UP。
というわけで、何とかしようと調べました。(結構事例ありますね・・・みんな苦労してるんだなぁ)
参考にしたサイトは以下のサイト。
http://d.hatena.ne.jp/kusakari/20071113/1194920895
まずは、ダンプを取ります。
コマンドは以下。
mysqldump -u root -–default-character-set=latin1 -c -n -d [DB名] > [ファイル名]
nkfコマンドを使って、latin1 -> utf8に変換すれば、なんとかなる・・・ということらしいので、
やってみたら、nkfコマンドがインストールされていませんでした。
サイトを参考にnkfをインストールして、
http://xn--w8jg1l6b1858ay57b.jp/kn03/kn0344.html#kn031031
以下のコマンドで変換します。
nkf -wE [変換前ファイル名] > [変換後ファイル名]
ファイルを開いてみて、UTF-8で開けたら出来上がりです。
インポートするときは、CHARSET=latin1 となっているところを、utf8に変更するのをお忘れなく。
文字列置換は、以下のコマンドでもできます。
sed -e s/latin1/utf8/ [変更前ファイル] > [変更後ファイル]
とりあえず、ダンプファイルを引き渡して、うまくいくことを祈ります・・・
コメント
コメントを投稿