PHP⇒unixODBC⇒SQLServer接続

Pocket

PHPからpdo_dblibを使用して、unixODBC⇒SQLServerとつなぐ方法です。
必要となるライブラリは以下の通り。

  1. unixODBC(http://www.unixodbc.org/)
  2. libiconv(http://ftp.gnu.org/pub/gnu/libiconv/)
  3. php(http://www.php.net/downloads.php)
  4. freetds(http://www.freetds.org/)

私の場合は、すべてtarファイルから展開してインストールしました。
PHP→SQLServerと辿る経路としては、次のようになります。
PHP⇒unixODBC⇒freeTDS⇒SQLServer
PHPはcentosで動作しており、内部エンコードはUTF-8。
SQLServerはMicrosoftWindows系なのでSJIS。
必ず文字コード変換が必要になります。
※phpの文字コード変換は、mb_convert_encording()を使えばできますね。
文字コードにおいて、シナッと重要なポジションにいるのが、freeTDS!!
こいつが、SQLServerとPHPの間で接続して文字コード変換も行います(^v^)
<freeTDSの設定で注意が必要な場所>
/usr/local/etc/freeTDS.conf
[global]領域に、文字コードの指定が必要です。
charset = cp932
client-charset = cp932

この2つを追加しましょう!!
SJISだと、機種依存文字やMS拡張文字が変換しきれないので、cp932がお勧めです。
しかし、デフォルトの文字コード表示はcp932はありません。
cp932を使えるようにするために、libiconvが必要になります。
これで、PHP側ではUTF-8。DB側ではSJISの関係が成り立ちます。
メッチャはまったけど、解決したときはスッキリ(*^v^*)