[PHP-users 32211] SQL Server 2000 を利用した時の nvarchar 項目の文字化けについて

kuri-369 @ mail.goo.ne.jp kuri-369 @ mail.goo.ne.jp
2007年 5月 28日 (月) 18:16:03 JST


はじめまして。栗田といいます。

SQL Server 2000 との接続で質問させていただきます。

データベースに SQL Server 2000(SP4) を利用し、ODBC で接続しているのですが、
nvarchar で定義されたフィールドを PHP から表示させようとすると文字化けして
しまいます。

以下のようにテーブルを作成し、データを登録しプログラムを実行すると表示結果
のように15文字までは正常に表示されるのですが、その後ろが文字化けしてしま
います。この時の文字コードは SJIS で、mb_strlen() の返ってきた値は36でした。

その他のテーブルも見ていたのですが、nvarchar で定義されている文字数分の半分
の文字数までなら表示は問題ないようです。

環境設定に問題があるのでしょうか。
解決方法をご存知の方がおられましたら、ご教授いただけますでしょうか。
どうぞよろしくお願い申し上げます。

----- 表示結果 ---------------------------------
グレート・ブリテンおよび北アイノ)( 2・ヒXニ6
------------------------------------------------

----- 作成したテーブル -----
CREATE TABLE dbo.KUNI (
   KUNI_CD  char(3)   NOT NULL ,
   KUNI_NM  nvarchar(30)
);

----- 登録したデータ -----
insert into dbo.KUNI (KUNI_CD, KUNI_NM)
 values ('GBN', 'グレート・ブリテンおよび北アイルランド連合王国(英国)');

----- 表示用の PHP プログラム -----
$dbh_str = "odbc:Driver={SQL Server};Server=XXXX;Database=YYY;Uid=ZZZ;Pwd=PPP;";

try {
   $dbh = new PDO($dbh_str);
} catch (PDOException $e) {
   echo "接続エラー!: " . $e->getMessage() . "<br/>";
   die();
}

$result = $dbh->prepare("select * from dbo.kcg_kuni");
$result->execute();
$row = $result->fetchall(PDO::FETCH_NAMED);

foreach($row as $w) {
    echo $w['KUNI_NM'];
}

----- 実行環境 -----
Server OS  : Windows Server 2003 R2
Web Server : Apache 2.2.3
PHP        : 5.2.2
DB Server : SQL server 2000 SP4

----- PHP.ini -----
[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = SJIS-win
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;
mbstring.func_overload = 0

以上


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