Blog

xamppでmysqlが文字化け(windows環境)

  • Update2007-11-27
  • Category
    • Backend
  • Other--
xamppでmysqlが文字化け(windows環境)のサムネイル画像

最近またプログラミングを始めてて、Rubyに手を出したけどどうもなじめず、phpでRailsのような事が実現できるCakephpというのを学ぼうと思っている。

で、開発環境を用意するために、今まで使ってた自宅のweb鯖をちょっと一新してxamppでリニューアルした。

■xamppとは?
コレを使うとapache・php・pear・mysql・phpMyAdmin・Filezillaなどが一括インストールされてしまうすぐれもの。

apache friends – xampp
http://www.apachefriends.org/jp/xampp.html

phpを使って開発するときは便利。
で、windows環境でこれをインストールするんですが、ほんとにあっという間にできてしまうんですよ。
でもmysqlとか単独でインストールする時って結構いろいろ聞かれたのに何も聞かれないなんてなんか変だ。
案の定、phpMyAdmin起動してみたら文字化けしてますた。

■文字コードを調べる
mysql > show variables like “char%”;
と打ち込むとこんな感じ
+————————–+——————————–+
| Variable_name | Value |
+————————–+——————————–+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | latin1 |
| character_sets_dir | C:xamppmysqlsharecharsets |
+————————–+——————————–+

latin1って何だよ?

で、utf8で開発したいのでいろいろ調べて見た結果結構苦労したけど解決したのでメモっときます。

■xampp/mysql/my.cnf内に以下のコードを追加
[mysqld]
init-connect = SET NAMES utf8
character-set-server = utf8
collation-server = utf8_general_ci

[mysqldump]
default-character-set = utf8

[mysql]
default-character-set = utf8

■xampp/phpMyAdmin/config.inc.php内の以下のコードをutf-8に修正
$cfg[‘DefaultLang’] = ‘utf-8’;
$cfg[‘DefaultCharset’] = ‘utf-8’;

ここまでできたらテストデータを入れてみます。
ただし、

■データを入れるときはphpMyAdminからInsert、又はphpから
コマンドプロンプトから直接入力するとShift-jisになるため。
データベースを作る時はコマンドプロンプトからでもおk

■phpからmysqlにつなぐとき”set name 文字コード”をクエリ送信し文字コード指定する
mysql4.1以降の場合は必要みたいです。ちなみに最新のxamppだとmysql5.0.45でした。

//————————————————–
//DB接続
//————————————————–
$host = “****”;
$usr = “****”;
$password = “****”;
$select_db = “****”;

if (!$conn = mysql_connect($host, $usr, $password)){
die(“データベース接続エラー.
“);
}

mysql_select_db($select_db, $conn);
mysql_query(“set names utf8”, $conn);

以上で文字化けはなくなりました。

付属のFilezillaというFTPサーバーソフトがあるけど以前使っていたTinyFTPよりも繋がりが早い!
phpもめんどくさいコード書き換えとかいらないもんなー。

これからぼちぼちケーキphpをいじってみます。