XAMPP+Yomi-Search(PHP)modified で 文字化け(PHP+MySQL の文字化け)

XAMPP のローカル環境(以前の日記参照→”XAMPPインストールメモ“) で Yomi-Search(PHP)modified を設置したところ文字化けが発生。Yomi-Search(PHP) では文字化けはおこらなかった。原因を調べメモ。


■データベースとテーブルの文字コード設定が原因
データベースの文字コード(MySQL 接続照合順序)が初期状態「latin1」のままだったことが直接の原因。phpMyAdmin 上で「ALTER DATABASE `DB名` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci」を実行し文字コードを utf8 へと変更。そして Yomi-Search(PHP)modified を再セットアップすると文字化けは解消した。データベースの文字コードを utf8 へ変更すると、再セットアップ時に各テーブルの文字コードも utf8 になるので、それで文字化けが解消されたのだと推測。よって、再セットアップが無理なら、作成済みの該当テーブルを utf8 へ変更してあげればいいのかなと思います。

—————————————————-

Yomi-Search(PHP)modified での文字化けは解消できたが、その他文字コードの問題解消方法に関していろいろ調べたのでメモ。(utf8 への統一を前提)

http://phpspot.net/php/pgMySQL4.1%8CnUTF-8%82%CC%8F%EA%8D%87.html
http://bono.s201.xrea.com/2006/03/11-utf8_xrea_3/
http://puchiko.lowtech.ne.jp/index.php?itemid=349&catid=27

ようは、「クライアント側の文字コードと、データベース側の文字コードが違うこと」が文字化けの大方の原因らしい。自分ではもろもろ utf8 で統一したつもりでも、PHP側とMySQL側の文字コードがきっとずれてるよ!ということらしいです。

以下文字コードの調べ方から、解決方法をメモ。

■MySQL側の文字コードをチェックする方法

SHOW VARIABLES LIKE ‘char%’

を実行する。

■PHPからMySQLの文字コードをチェックする方法

echo mb_internal_encoding();

を実行する。

■クライアント側の文字コードを設定
スクリプト側にて、MySQLに接続後、毎回以下のクエリを発行してやる。

$sql = “SET NAMES utf8”;
$result = $db->query($sql);

(*Yomi-Search(PHP)modifiedには最初から記載されてます)

■MySQL側の文字コード設定を修正
MySQL の設定ファイル my.cnf を修正します。XAMPP の場合は \xampp\mysql\bin 以下にファイルがあります。(Windows の場合 my.cnf が短縮ダイヤルファイル(?)と認識され、 拡張子が強制省略されて表示されてます。ですので「my」ファイルがmy.cnfです。)
それを以下のように修正・追記します。

・[mysqld]の部分
#character-set-server = latin1
character-set-server = utf8
#collation-server = latin1_general_ci
collation-server = utf8_bin
init-connect=SET NAMES utf8

・[mysqldump]の部分
default-character-set = utf8

・[mysql]の部分
default-character-set = utf8

■作成済みデータベースの文字コードを修正
MySQL 側の文字コードをチェックした際、 character_set_database が latin1 などであった場合は、そこを utf8 に修正する。

ALTER DATABASE ‘DB名’ DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci

を実行すると、データベースの文字コードが変更される。

■その他
あとは、○○を再コンパイルしたりとか小難しい方法がぽつりぽつり。。難しいのでパス。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です