開発者たる者、誰しも必ずぶち当たるであろう壁。
それが文字化け。。。
私も何度か乗り越えたのですが、再度文字化けに悩まされました。。。
あぁいつになったら文字化けから開放されるのだろう。
それが文字化け。。。
私も何度か乗り越えたのですが、再度文字化けに悩まされました。。。
あぁいつになったら文字化けから開放されるのだろう。
事の始めは、ZEND_DBを使用した際に日本語がうまく取得できなかったことにあります。
CAKEPHPを使用していた頃は、DBの文字コードの事なんか全然考えてませんでした。
なんたって、DB接続コンフィグに文字コードを指定するだけで良かったのですから。
なぜ!?ZEND_DBが悪いのかと色んなところを探しはしたものの、答えは見つからず。。。
そこで、MySQLに接続詞、「status」コマンドを見てみると。。。
character_set_clientがlatin1ではありませんか!?
そりゃ、文字化けが起こるわけだ。
つまり。。。CAKEPHPでは、SET NAMES か何かを使用して、DB接続毎に文字コードを指定していると思われます。
で、今回もSET NAMESを使用すれば問題は解決しました。
DB接続の際の設定
しかし、色んなサイトを見ていくうちに、「SET NAMES」は使ってはいけんよ~って記事がちらほら
SET NAMESは禁止
ふむ、専門的すぎてよくわからない。。。
というわけで、今回はSET NAMESは使用せずにDBの設定自体を変えていこうと思います。
MySQLの場合、my.cnfを変更し、再起動すればOK
MySQLに追加する文(以下はUTF-8の場合)
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を使用しても正常に日本語が取得できました。
めでたしめでたし・・・・・・って、これで一日つぶれちゃったよ!・・・

コメントする