MySQLの文字化け。。。

開発者たる者、誰しも必ずぶち当たるであろう壁。

それが文字化け。。。

私も何度か乗り越えたのですが、再度文字化けに悩まされました。。。

あぁいつになったら文字化けから開放されるのだろう。

事の始めは、ZEND_DBを使用した際に日本語がうまく取得できなかったことにあります。

CAKEPHPを使用していた頃は、DBの文字コードの事なんか全然考えてませんでした。
なんたって、DB接続コンフィグに文字コードを指定するだけで良かったのですから。

なぜ!?ZEND_DBが悪いのかと色んなところを探しはしたものの、答えは見つからず。。。

そこで、MySQLに接続詞、「status」コマンドを見てみると。。。

character_set_clientがlatin1ではありませんか!?

そりゃ、文字化けが起こるわけだ。

つまり。。。CAKEPHPでは、SET NAMES か何かを使用して、DB接続毎に文字コードを指定していると思われます。

で、今回もSET NAMESを使用すれば問題は解決しました。

DB接続の際の設定
//DB接続
$db = Zend_Db::factory('pdo_mysql',$params);
$db->query('set names utf8');

しかし、色んなサイトを見ていくうちに、「SET NAMES」は使ってはいけんよ~って記事がちらほら
SET NAMESは禁止

ふむ、専門的すぎてよくわからない。。。
というわけで、今回はSET NAMESは使用せずにDBの設定自体を変えていこうと思います。

MySQLの場合、my.cnfを変更し、再起動すればOK

MySQLに追加する文(以下はUTF-8の場合)
[mysqld]の項に追加
default-character-set = utf8
skip-character-set-client-handshake
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8

[client] の項に追加
default-character-set=utf8
これで、MySQLに接続した後で、「status」コマンドを見てみると、character_set_clientがUTF8になってました。

ZEND_DBを使用しても正常に日本語が取得できました。
めでたしめでたし・・・・・・って、これで一日つぶれちゃったよ!・・・

トラックバック(0)

このブログ記事を参照しているブログ一覧: MySQLの文字化け。。。

このブログ記事に対するトラックバックURL: http://coldspice.net/mt/mt-tb.cgi/15

コメントする

2008年7月

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
Powered by Movable Type 4.1

プロフィール

名前:Rr(ラール)

色んな技術に手を出しているへっぽこプログラマ
得意なプログラム言語はJavaだが、最近はめっぽうPHPにはまっている。