0

DBI を使用して SQL Server データベースに接続し、そこからデータを取得する Perl スクリプトを UNIX で実行しています。スクリプトは次のようになります。

$dbh = DBI->connect("dbi:Sybase:server=$connect;charset=UTF-8", $login, $password) or die("Couldn't connect to $connect as $login/$password:
$DBI::errstr");


$sql = "use mydb";
$sth = $dbh->prepare($sql);
$sth->execute or die("execute failed");
$sth->finish;


$sql = "MyProc \@DATE='1/1/2008'";
$sth = $dbh->prepare($sql);
$sth->execute or die("execute failed");
while (($body) = $sth->fetchrow()) {
        print "$body\n";
}
$sth->finish;

$dbh->disconnect if $dbh;

body 変数は、NVARCHAR で非 ASCII 文字を含む列からデータを取得します。クエリは正常に実行されますが、print ステートメントは ????? を吐き出します。非ASCII文字に遭遇したとき。DBI->connect では、文字セットも指定しましたが、うまくいきません。

これを機能させる方法について何か考えはありますか?

4

3 に答える 3

6

あなたのコードは問題ないようです。

あなたがデータベースに入れ、その後取得しているものがまだUTF-8エンコーディングではないと信じる理由はありません。

データを印刷する端末が実際にUTF-8モードであることを確認しましたか?

于 2008-12-30T21:31:30.347 に答える
2

端末にデータを出力したときに見たもの、または見なかったものに基づいて、存在しないバグを追跡するのに何時間も無駄にしました。非印刷文字の影響を受けず、システムのディスプレイが正しいグリフを非 ASCII 文字コードにマップできるかどうかに依存しないデータを検証するには、いくつかの方法があります。データが正しく表示されない場合は、それらをファイルにダンプし、16 進エディターでファイルを参照するか、od ユーティリティを使用して実行します。

于 2008-12-31T00:40:47.860 に答える
0

FreeTDS + ODBC 経由でPerl を SQL Server に接続しましたが、文字エンコーディングに問題はありませんでした。たぶんSybase DBIがここでの犯人です...

于 2008-12-30T21:28:16.360 に答える