[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 メーリングリストの案内