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