fuelphpに挑戦したところ文字化けで爆ハマり

色々なことをやりすぎてどれが根本原因だったのかわからなかったです\(^o^)/
が、試した過程を残して大体このあたり感を出します\(^o^)/
fuelphpは全く悪くないです\(^o^)/

現象:DBから取得した内容が文字化けする。
環境:
fuelphp 1.7
centos 6.5
php 5.3.3
myql 5.5系

調査1:DBの文字コード設定
mysqlに接続して中の値を見ると、ちゃんと表示されていました。
よくありがちなこの時点で?になるパターンではなかったのですが、
方々を見て一部追加。

[mysqld]
character-set-server = utf8 はしていた。
※この時点でのshow variablesの結果は覚えていないです。スイマセン・・・。

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

でも何も変わらず。

調査2:どの時点で文字化けするか調査
fuelphpで何かしてるんだっけ?
ということで、以下のコードを実行。

$conn = mysql_connect("localhost", "user", "pass");
mysql_select_db("database", $conn);

$sql = "SELECT * FROM hogehoge";
$result = mysql_query($sql);

while ($row = mysql_fetch_assoc($result)) {
var_dump($row);
}

なんとちゃんと表示されます。
じゃあfuelphpの中か、というわけで
core/classes/database/query.phpで
executeした直後の変数をvar_dump()したところ、ここで既に化けてる。
調査を繰り返し気づいたのは、ドライバーがPDOじゃんということ。
なるほど、mysql_connectとは違うよね。

その後、「PDO 文字化け」あたりでgoogle先生に訪ねて紹介されたサイトを見ました。
pdoでmysql接続したら文字化けした時のメモ
PHP 5.3.6より前のバージョンの PDO MySQL で charset を指定する

おぉ、うちのサーバは5.3.3だわ!
ということで上記のサイト内で書かれている対応をしたのですが、
まだ化けていたのです。
※記事をちゃんと読んでいればもっと早く直っていたかもしれないのです。

結局、その後phpを5.4系にして
fuelphp内で定義してあるdsnにcharset=utf8;を追加したり
迷走してしまいました(;´Д`)

ここで
pdoでmysql接続したら文字化けした時のメモ
の記事を読み返し、
「調べてみたところ、DROP DATABASEの必要がある…??」

ん・・・これは・・・・

そして作り直したところ
fuelphpを通した結果が正常になりました。
確実にもっと早く直ってた気がします\(^o^)/

でも知らなかったことが知れたし、
なんかすっきりしたー!

コメント

タイトルとURLをコピーしました