こんにちわ モコです
●何が起こったのか
DBの初期設定が変だったので今になって問題が起こった。
まぁ、家を建ててから土台を直そうっていうんだからドキドキ夢工場。
何とか突貫工事終了。文字化けしてるページとかあったら教えて欲しいどす・・
MySQLをダメダメっぽく書いてあるように見えるかもしれませんが、今興奮状態だからです。読み取って下さい。
(ちなみに、一部の人が関係ある、モコメインPCの調子が悪い件は関係ナス)
●原因
MYSQL初期設定に skip-character-set-client-handshake を入れてなかった。確信が有るわけじゃないが、コレが原因の筈。
UTF-8だと思ったらなんか変換された状態でDBに入っていて、DBから出す時にまたUTF8に変換して出してくれていた感じみたい。
ぱっと見、問題なさそうなんだけど、SELECT で検索結果がおかしくなる事があるので直したかった。
●対応
skip-character-set-client-handshake をつけない状態で、default-character-set=latin1 でダンプする。
こんな感じ?
>mysqldump -a -uUSERNAME -pPASSWORD --default-character-set=latin1 DB_NAME > DB_NAME_table.dump
データを開いて(モコは秀丸でやった)文字化けしてないことを確認。してたら削るなり直すなりしれ。
latin1と記述されている所をutf8に変える。
utf8で保存。
元のDBをDROPして、新たに作り直す。一応明示的にUTF8を忘れるなよ
mysql> drop database DB_NAME;
mysql> create database DB_NAME default character set utf8;
対応2(skip-character-set-client-handshake)を付けてmysqld再起動
>service mysqld restart
DBにぶちこむ
>mysql -uUSERNAME -pPASSWORD DB_NAME < DB_NAME_table.dump
正常終了することを祈る。
ダメだったら削るなり創意工夫して正常終了するようにしれ。
モコみたいに半日悩め。
正常終了したら他人に見てテストしてもらう ← 今ココ
●対応2
skip-character-set-client-handshakeの対応。
ていうか、以降モコはMYSQLをインスコしたら最初にコレをmy.cnfに追加する事を誓う。
忘れると後から困る。
[mysqld]
default-character-set=utf8
skip-character-set-client-handshake
もうひとつ確認することも。
mysql> show variables like "char%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /xx/xx/xx/xx / |
+--------------------------+----------------------------+
こんな感じ(latin1が入ってる!)になったら、
mysql> set names utf8;
こうする。
mysql> show variables like "char%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /xx/xx/xx/xx / |
+--------------------------+----------------------------+
多分こうなるはず。ならなかったら 。゜(゚´Д`゚)ノウンコ-
MYSQLを入れた時点で対応2をやってれば問題なかった(と、現時点では思っている)
なんでデフォルトでこうなっているのか理解に苦しむ(と、現時点では思っている)
まぁそのうち詳しくなったら納得できるのかもしれないね。
【参考】
くまくまーさん、いつもお世話になっております。
http://wota.jp/ac/?date=20061011