2009年7月4日土曜日

ZendFramework + PostgreSQL で文字化けエラー

どうも俺です。
ZendFramework1.8+PostgreSQL8.3.7でPHP(5.2.6)アプリケーションを作成していたのですが、ハマったのでメモしておきます。

PostgreSQLは、データベース文字コードをSJISで作成できません。
なので携帯サイトでPHP(web)をSJISで作りたい場合は、PHP側の文字コードとPostgreSQL側の文字コードを変換しなければなりません。
一般的にはPostgreSQLは文字コードをEUC-JPかUTF8で作成します。
 $ createdb -E EUC-JP dbname


PHPではクエリを投げる前に
<?php
pg_set_client_encoding($connection, "SJIS");
とかやればイイのですが。。

ZendFrameworkでDB接続を行う場合は一般的に
<?php
$db = Zend_Db::factory("Pdo_Pgsql", array(
                   "host" => "localhost",
                   "dbname" => "dbname"));
のように使うと思います。(俺だけか?w)

この場合、全てのactionメソッドでDB接続をする度に
<?php
$db->query("SET NAMES 'SJIS'");
って処理させるのが面倒くさい!
<?php
Zend_Db::factory();
した際に自動でクライアント文字コードをSJISにしたい!
という事で2時間悩みました。。。

こんな場合はZend_Db::factory()の第2引数のパラメータに
<?php
$db = Zend_Db::factory("Pdo_Pgsql", array(
                   "host" => "localhost",
                   "dbname" => "dbname",
                   "charset" => "SJIS"));
とcharsetパラメータを追加すれば良いみたいです。

以上。・゚・(ノε`)・゚・。

0 件のコメント: