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

moto moto.p3j @ gmail.com
2006年 11月 28日 (火) 00:44:28 JST


細田さまアドバイスありがとうございます。

> こんにちは、細田です。
> あてずっぽうで書きます。
>
> クライアント側のODBCの設定で「文字データを変換する」というオプションがありますが、それをOFFにして試してみては如何でしょうか?

新しいDSNを定義して、odbcな関数で確認してみました。
が、OFFにしてもSJISで帰ってきてしまいました。
最後に、テストコードをのせておきます。
※「文字データを変換する」の意味するところは何かをまだ調べれていませんが、
  とりあえず、ご報告まで。

> 以下、蛇足ですが、、、
>
> > アラビア語部分は????と帰ってきます。
> 日本のXPって通常はアラビア語のような右から左に流れる言語(?)はサポートしてませんよね?
> > ※ Javaとか、.Netでは正常にアラビア語も取得できます。
> という事は、アラビア語のサポート設定をしたという事でしょうか?

どっかの国のHPからアラビア語コピッてDBにつっこんでおいて、
VisualStudioなどのデバッガでメモリ内でアラビア語が文字化けしたり
「??」になってないことを確認しました。
ちゃんと、同じ文字だったかまでは正確に確認してなかったので、
改めて確認としてみようと思ったのですが、ODBCの設定をさわりまくってたら、
なぜかSQL Server Management StudioがSQL Serverに接続できなくなってしまった。
なので、ほんとにちゃんととれているか、今現在は自信を持って断定はできません。

※今回初めてアラビア語が右から左に流れるってしりました。
  Visual Studio のソースコードエディタ?にアラビア語ペーストして、
  Backspace押すと右側から消えていく(Delと同じ状態)ので、なんでかなぁ?と
  不思議に思っていたんですが、そういう理由なんですね。

> 切り分けと言う意味ではハングルとか中国語などで確認した方がいいのでは?

ハングルは全部かどうかはわかりませんが、SJISにあるし中国語(漢字)も
SJISに存在しない文字を見つけるのが面倒なのでアラビア語を使ってみました。
次の休日にでも時間がとれたら、ちょっと本腰いれて調査してみようとおもいます。

==== テストコード ====

<?php
$dsn  = 'MSSQL2005Sample';
$user = 'hoge';
$pw   = 'hage';
$sql  = 'select * from dbo.[User]';

$conn = odbc_connect( $dsn, $user, $pw );
$result = odbc_exec( $conn, $sql );

$rows = array();

while ( $row = odbc_fetch_array( $result ) ) {
	array_push( $rows, $row );
}

odbc_close( $conn );

//print_r( $rows );

$str = var_export( $rows, true );
$fhdl = fopen( 'odbc.txt', 'ab' );
fwrite( $fhdl, "〜UTF-8で書いてるよね?〜\n" );
fwrite( $fhdl, $str );
fclose( $fhdl );

?>


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