[PHP-users 30961] PDO_ODBC + *.mdb で UNICODE を扱う

chores @ jp1.cx chores @ jp1.cx
2006年 12月 10日 (日) 12:54:59 JST


塚田と申します。

「[PHP-users 30792] SQL Serverで、nvarcharの値がShift_JISで帰ってくる」と
類似しているのですが、私の場合は *.mdb との連携で難儀しています。

以下の条件で *.mdb のデータを取得すると、SJIS で取得されてしまいます。

・OS: Windows Server 2003
・PHP: PHP 5.2.0 (IIS/ISAPI)
・利用している関数: ODBC および DB2 関数 (PDO_ODBC)
・利用しているDB: Microsoft Access Driver (*.mdb)
  ※ 当該 *.mdb ファイルは、Excel から ODBC 経由で UNICODE 文字が取得で
     きることを確認しました。

下記のようなコードで試験したところ、出力は SJIS エンコードとなってしまい
ます。

<?
mb_internal_encoding('UTF-8');
$dbh = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=<ファイル名>;Uid=Admin");
$cursor = $dbh->query('SELECT [name] FROM [tbl]');
foreach ($cursor as $row) {
	echo $row['name'];
}
?>

*.mdb の内部エンコードが何なのかは把握していないのですが、少なくとも 
SJIS ではなく、何らかの UNICODE であると思います。(たしか、MS SQL Server 
と同様に UTF-16 だったような)

そして、Excel からODBC 経由で UNICODE 文字が取得できるのであれば、PHP で
も、何らかの UNICODE として取得できても良いのではと考えています。

-- 
 <chores @ jp1.cx>



PHP-users メーリングリストの案内