m6uのエンジニアっぽい日記

PHP利用開発やFuelPHP利用開発、PostgreSQL利用開発、Androidアプリ開発、CentOS7サーバー構築など、テクニカルでエンジニアっぽい内容の日記

FuelPHP 1.7.2でPostgreSQLに接続するときclient_encodingを与える必要が出てきた

 fuel/app/config/db.php にてデータベース接続を定義していますが、こんなふうに変わりました。 正直言って、なんでこうなのかわからないけど。

v1.7.1のとき

return array(
    'active' => 'local',

    'local' => array(
        'type' => 'pdo',
        'connection' => array(
            'dsn' => 'pgsql:host=localhost;port=5432;dbname=your_dbname',
            'username' => 'your_username',
            'password' => 'your_password',
            'persistent' => false,
        ),
        'identifier' => '"',
        'table_prefix' => '',
        //'charset' => 'utf8',
        'enable_cache' => true,
        'profiling' => false,
    )
);

v1.7.2のとき

return array(
    'active' => 'local',

    'local' => array(
        'type' => 'pdo',
        'connection' => array(
            'dsn' => "pgsql:host=localhost;port=5432;dbname=your_dbname;options='--client_encoding=UTF8'",
            'username' => 'your_username',
            'password' => 'your_password',
            'persistent' => false,
        ),
        'identifier' => '"',
        'table_prefix' => '',
        //'charset' => 'utf8',
        'enable_cache' => true,
        'profiling' => false,
    )
);

変更点

 charsetでエンコーディングを与えていたものが使えなくなり、dsnにてoptions指定を追加する必要があり、上記のような書き方になりました。
 なんでそうなったのかは、下記参考記事が良かったです。
 「FuelPHP で PDOによるPostgreSQL接続の罠 - Qiita
 「PHPでデータベースに接続するときのまとめ - Qiita
 どちらでも、《DSNに options='--client_encoding=UTF8'" を含める》話が書いてあります。