エンジニア採用セミナー
エンジニア採用セミナー
2009.05.18

MySQLの文字化け

まっちー

MySQLでどうしても文字化けが直らない

localhostでDBにデータを格納する際に、実は全角文字がずっと文字化けしていたのだけど、それはphpMyAdminの中だけで、実際にphpファイルの中でデータを出力すると問題なく入力したデータが表示されていたので、基本的にこの問題についてはずっと無視していた。

でもまあ、いつまでも放っておくのもあれかなと思い、文字化け問題の解決に乗り出すことにした。

文字のエンコードはUTF-8。eclipseを使って各ファイルを生成する際にもちゃんとUTF-8で記述しているし、トップページのctpファイルの中でもちゃんとキャラクタセット(で合ってる?)をUTF-8にしてあるし、configファイル内にあるdatabase.phpにもエンコードはUTF-8だと書いているし、DBの方でも照合順序はちゃんとUTF-8にしてある。それにもかかわらずなぜ文字化けしてしまうのか不明だったのだけど、その理由はともあれ(未だによく分かっていない)解決方法に関しては、こちらを参考にさせていただいた。

xamppのmysqlフォルダ内にあるmy.cnfというファイル(正しくはmysql内のbinフォルダの中かな)を何かしらのテキストエディタで開いて以下の文を加えると、文字化けが直るらしい。

default-character-set=utf8

[mysqld]
default-character-set=utf8
skip-character-set-client-handshake

ファイルを開いて中を見てみると、<pre>[code]や[mysqld]って書いてある行が見つかるので、その下にdefaultなんちゃらを書き込んで保存すればOK。

実際に僕もこれで文字化けが解決した。

ただ、ここにたどり着くまでに結構時間がかかった。何がそんなに問題だったのかって、my.cnfファイルって単語がどこを探しても見当たらないということだ。最初はフォルダオプションで拡張子を表示させていないからいけないのかと思ったけれど、拡張子を表示させるようにしても、my.cnfなんてファイルは出てこない。

実はこれ、binフォルダ内にあるmy(種類は短縮ダイヤル)ってのがそうらしい。

確かにね、何となくこれがそうなんじゃねーかなぁとは思っていたさ。いや、ほんとに。他に該当するようなファイルもないし。でもダブルクリックしても何の反応も見せないからやっぱり違うのかなぁと判断してしまったのが、そもそもの間違いだったようで・・・。

まあ、最終的には解決したから、なにをかいわんやです。終わり良ければ全て良しって昔の人も言ってるし。
<h2>画像リンクについての追記</h2>
前回、画像にリンクをつけるには

<pre>[code]

<?php echo $html->link($html->image('image.jpg'),"/users/index",null,null,false) ?>

こんな風に書けば良いと言ったけれど、そんなことをするまでもなく、イメージメソッドの第2引数にリンク先のURLを書くのでも大丈夫だったらしい。

<php echo $html->image('image.jpg', array('url' => '/users/index', 'width' => 275,'height' => 87)) ?>

どう書くかは好み次第?