CakePHPでちょっとしたWebアプリを作成していたとき。 自分のところの開発サーバで問題なく稼動、お客様サーバへ設置、という段になり。
お客様指定のサーバにアプリを設置、試験稼動。
エラー。
あれ。このサーバMySQL入っていないんですね。
PostgreSQLが入っていたので、database.phpをPostgreSQL用に書き換えて再度試験稼動。
エラー。
エラーメッセージを眺めていると
Warning: SQL Error: ERROR: invalid byte sequence for encoding "EUC_JP": 0xe381 in /some_home_directory/application_name/cake/libs/model/datasources/dbo_source.php on line 437
そんなモンEUCじゃねえ!と怒っています。
えーとつまり、phpのclient encodingがEUC-JPのまま?
どっかでpg_set_client_encodingを自前で入れろってこと??
そんじゃどこに入れるべぇか、とソースをつらつら眺めていたところ……
お?dbo_postgres.phpでsetEncodingなる関数があるじゃないですか。
$this->setEncoding($config['encoding']);
などとやっていますので、なんだ、database.phpのハッシュに'encoding'なるものを追加すればいけるのかな?
結果→あたり。
変更前
var $default = array('driver' => 'postgres',
'connect' => 'pg_connect',
'host' => 'localhost',
'login' => 'tsukui',
'password' => 'tsukui0023',
'database' => 'tsukuischedule',
'prefix' => '');
↓
変更後
var $default = array('driver' => 'postgres',
'connect' => 'pg_connect',
'host' => 'localhost',
'login' => 'tsukui',
'password' => 'tsukui0023',
'database' => 'tsukuischedule',
'encoding'=>'utf-8',
'prefix' => '');
もしCakePHPを使う上での常識だったらお恥ずかしい限りですが。
http://blog.flatbit.co.jp/btlog/mt-tb.cgi/17
Comments
まだコメントはありません。よろしければコメントをどうぞ。
Post Your Comment