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に直接日本語を登録してみたのですが、これがまた、文字化け。
今度は?マークが表示されるようになりました。
テーブルの「照合順序」がきちんと設定できていないのが原因?
そうこうしているうちに、phpMyAdminからログインして、他のデーターベースを見てみると、なぜか、この練習用データベースだけ日本語が登録されていないことに気がつきました。
他のデータベースと比較してみると、原因が分かりました!!
日本語がきちんと表示されているデータベースは、テーブルの「照合順序」がutf8_general_ciとなっていたのです。
文字化けしているテーブルの照合順序はlatin1_swedish_ci(スウェーデン語)になっていました。
ということで、last_name行の照合順序だけutf8_general_ciに変更してみると・・・・
ちゃんとファイルも、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)ファイルを変更する前に登録したデータの文字化け(アラビア語のようなやつ)は直りませんでした。なので、やはり、ファイル変更も必要みたいです。