2014-09-11_20h08_24

Windows7のコマンドプロンプトからXAMPPのデータベース(MySQL)に日本語データを登録する練習をしているのですが、どうしてもアラビア語の文字のように文字化けする(^^ゞ

やっと解決したので、覚書としてやり方を書いておきます。

WindowsのコマンドプロンプトをUTF-8に変更すると日本語が登録できない

まず検索エンジンで日本語の文字化けについて調べていると、Windowsのコマンドプロンプトをchcpコマンドでshift_jisからUTF-8に変更すると良いみたいなことを、書いてやってみたんですがこれが失敗・・・?

コマンドプロンプトで、日本語が入力できない状態になってしまいました(^^ゞ

元に戻して再度検索すると、XAMPPのphp.iniとMySQLのme.ini(もしくはmy.cnf)を変更したらよいということだったので変更してみることに。

XAMPPのphp.iniとMySQLのme.iniをUTF-8に変更する

XAMPPのphp.iniとme.ini(バージョンによってmy.cnf)の二つを編集します。
下記のサイトを参考にしてください。

参考サイト:
XAMPPのPHP,MySQLの文字コードをUTF-8に設定 – 目指せネオニート
XAMPP | PHP・MySQLで文字化け

※ my.cnfは下記のコードでないとMySQLが起動できませんでした。

# [client]
default-character-set=utf8

# [mysqld]
character-set-server=utf8
skip-character-set-client-handshake

# [mysqldump]
default-character-set=utf8

# [mysql]
default-character-set=utf8

ただ、ファイルを全て変更して、ブラウザーからMySQLやMySQLに直接日本語を登録してみたのですが、これがまた、文字化け。

今度は?マークが表示されるようになりました。

2014-09-11_20h21_48

テーブルの「照合順序」がきちんと設定できていないのが原因?

そうこうしているうちに、phpMyAdminからログインして、他のデーターベースを見てみると、なぜか、この練習用データベースだけ日本語が登録されていないことに気がつきました。

他のデータベースと比較してみると、原因が分かりました!!

日本語がきちんと表示されているデータベースは、テーブルの「照合順序」がutf8_general_ciとなっていたのです。

文字化けしているテーブルの照合順序はlatin1_swedish_ci(スウェーデン語)になっていました。

2014-09-11_17h05_08

ということで、last_name行の照合順序だけutf8_general_ciに変更してみると・・・・

2014-09-11_20h28_30

ちゃんとファイルも、MySQLのデータベースも日本語で表示されるようになりました!!

コマンドプロンプトやターミナルからテーブルの照合順序を変更する場合は

ALTER TABLE デーブル名 COLLATE utf8_general_ci

でOKです。

テーブルを作るときに照合順序なんて設定していなかった・・・。空白の場合は勝手にlatin1_swedish_ciが設定されるようです。

データベースを作成する時に

CREATE DATABASE データベース名 CHARACTER SET utf8 COLLATE utf8_general_ci;

と入力しましょう!

ファイルやデータベースをUTF-8にしているにも係らず、日本語が表示されない場合は「照合順序」を疑ってみましょう

※php.iniとme.ini(my.cnf)ファイルを変更する前に登録したデータの文字化け(アラビア語のようなやつ)は直りませんでした。なので、やはり、ファイル変更も必要みたいです。