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

kuri-369 @ mail.goo.ne.jp kuri-369 @ mail.goo.ne.jp
2007年 5月 29日 (火) 14:18:09 JST


栗田です。
メールを出した後、PDO 関数ではなく、Microsoft SQL Server 関数を使って試したところ、漢字の文字
化けは無くなりました。

PDO 関数を使って書きたかったのですが、諦めてMicrosoft SQL Server 関数を使って書きます。

お騒がせいたしました。


----- Original Message ----- 
送信者: kuri-369 @ mail.goo.ne.jp<kuri-369 @ mail.goo.ne.jp>
宛先: php-users @ php.gr.jp
日付:Monday, May, 28, 2007, 06:16 PM
件名: [PHP-users 32211]SQL Server 2000 を利用した時の nvarchar 項目の文字化けについて

> 
> 
> はじめまして。栗田といいます。
> 
> 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 mailing list  PHP-users @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3
> 


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