FuelPHP + pdo_sqlsrv + SQL Server で「’NAMES’ は SET オプション として認識されません。」となったときの対処法

takahashi 著者:takahashi

FuelPHP + pdo_sqlsrv + SQL Server で「’NAMES’ は SET オプション として認識されません。」となったときの対処法

FuelPHPにSQL Serverを連携させたPHPのWebアプリを作ったときに出た問題。

SQL文自体には問題がなかったのですが、このようなエラーが発生しました。

原因はFuelPHP側の設定ファイルに文字コード設定を入れてしまっていたこと。

// fuel/app/config/db.php

return array(
    'default' => array(
        'type' => 'pdo', 
        'connection' => array(
            'dsn' => 'sqlsrv:Server=localhost;Database=hoge_db;',
            'username' => 'user',
            'password' => 'password123',
            'persistent' => false,
        ),
        'identifier' => '', 
        'table_prefix' => NULL,
        'charset' => 'utf8', //←これが原因
    )
);

charsetを入れると、DB呼び出し時にfuelが自動的に

SET NAMES 文字コード;

のようなSQL文を実行しようとします。

ところが、SQL Serverではこの”SET NAMES”オプションが廃止されており、これが原因でSQL実行時に毎回エラーになってしまいます。

対策としては

'charset' => 'utf8', 

'charset' => '', 

と書き換えれば、SET NAMESが行われなくなり、エラーが解決します。

いろいろ調べまくってやっと判明したぐらい細かい項目で、原因がわかるまで苦労しました…

お困りの方の参考になれば幸いです。

  • この記事いいね! (0)

著者について

takahashi

takahashi administrator

Webエンジニア。 趣味で自宅サーバーを稼働中。 ファンタジーが好き。