DBの文字化け(UTF8)対応
「mysqlへデータをインポートしたら文字化けた!」
mysqlに入り"select * from hogetebal where name "をしたら
??????という表記のものばかり表示された。
文字化けっぽいので対策を
対処1 デフォルトの文字コードの設定をutf8に
/etc/my.confの修正
[mysqld]
default-character-set=utf8
character-set-server=utf8
↑最後にこの2行を追記する
保存してmysql再起動
/etc/rc.d/init.d/mysqld restart
と思ったら停止はOKでたけど起動にNGが!
そゆ時はエラーログを見ればおkってことだったのでログをみるとutf8の記述が間違っていますよと。
my.confを確認したら"〜=utf8;"と…セミコロンいらないやん!とPHPの癖によるミスでした><
修正するとmysqlが起動したので、select文で文字化けしてないか見てやると、依然として文字化け。
デフォルトの設定をしただけなので、既存のは当然代わってないですよねw
対処2につづく。
対処2
次に、既存のDBの文字コードを変換する。
既存のDBの文字コードを変換するというぐらいだから、
DB個別にUFT8にしていくと思い、
mysql> set hogedb utf8;
ERROR 1193 (HY000): Unknown system variable 'hogedb'…
あれれ〜?と思い、サイトに書いてあった通り
mysql> set names utf8;
とするとすんなりOKが出ましたww
なんだ、namesで全部のDBをUTF8にしてくれるんですね便利便利。
確認のためSELECT文を発行したらちゃんと文字化けしないで返してくれましたよ!
と思ってやっていたら、mysqlから一回出て入りなおすとまた文字化けしている…
対処3につづく。
対処3
文字コードの現状を確かめるために下記のコマンドを打つ
mysql> show variables like "char%";
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Variable_name | Value |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
character_set_client | latin1 |
character_set_connection | latin1 |
character_set_database | latin1 |
character_set_results | latin1 |
character_set_server | utf8 |
character_set_system | utf8 |
character_sets_dir | /usr/share/mysql/charsets/ |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
ほかの部分がuft8になっていないから同じことを繰り替えしていたっぽい。
[mysqld]
skip-character-set-client-handshake
↑この一行を追加で解決
ところがどっこい、もってくる時はいいのだが
アプリ側から問い合わせる時に文字化けが起きる…
対処4へつづく。
対処4
・DBの再構築
まずはDBの削除。そしてDBのcreate。ここでutf8を指定してやる
CREATE DATABASE データベース CHARACTER SET utf8 COLLATE utf8_bin;
そしてテーブル情報とデータをインポートを普通にやって
すべての文字化け対策完了。
問題なく動いております。めでたしめでたし。
参考文献(対処1・2):http://it.kndb.jp/entry/show/id/15
参考文献(対処3):http://wota.jp/ac/?date=20061011
参考文献(対処4):http://bluedb.org/ajax/archives/26