[PHP-users 30792] SQL Serverで、nvarcharの値がShift_JISで帰ってくる

moto moto.p3j @ gmail.com
2006年 11月 25日 (土) 16:36:59 JST


はじめまして。ぬまのといいます。
メーリングリストでは、いつも勉強させていただいています。

SQL Server 2005のnvarcharのカラムをUnicode(UTF-16)として抽出する方法が
わからず困っています。

下記コードでSQL Serverに問い合わせをすると、
結果がShift_JISで帰ってきます。
試しにアラビア語をDBに入れて実行してみると、
アラビア語部分は????と帰ってきます。
※ Javaとか、.Netでは正常にアラビア語も取得できます。

SQL Serverが日本語環境なので親切でShift_JISに直してくれて
いるんだろうと思い、わからないなりにも、
set language us_english とかしてみたんですが、
まったく関係なさそうです。

ちなみに、mbstring.internal_encoding、ソースともにUTF-8です。
PHPの実行環境はWindowsXPです。

nvarchar、nchar、ntextのカラムの値をShift_JISではなく、
Unicodeとして取得する方法をご存じの方がいらっしゃいましたら、
是非教えて下さい。よろしくお願いします。

==== コード ====

$conn = mssql_connect( 'hoge', 'fuga', 'hage' );
mssql_select_db( 'sampledb', $conn );
$sql = 'select * from dbo.[User]';
// us_english にしたらShift_JISでは帰ってこないのでは?
mssql_query( 'set language us_english' );
$result = mssql_query( $sql, $conn );
$rows = array();
while ( $row = mssql_fetch_array( $result ) )
array_push( $rows, $row );

mssql_close( $conn );

$str = var_export( $rows, true );
$fhdl = fopen( 'add.txt', 'ab' );
fwrite( $fhdl, $str );
fclose( $fhdl );


-- 
NUMANO Motonobu
moto.p3j @ gmail.com


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