0

私はMSSQLServer 2008データベースを持っており、そこからperl DBD::Sybaseモジュールを使用してデータをフェッチしています。ただし、DBには、著作権記号、商標記号など、正しくインポートされない特殊文字がいくつかあります。Perlは、これらの特殊文字をすべて疑問符文字に変更しているようです。これを修正する方法はありますか?

charset=utf8接続文字列で指定してみました。ドキュメントには設定について記載されていますsyb_enable_utf8 (bool)が、それを試してみるとエラーが発生します。

Can't locate object method "syb_enable_utf8" via package "DBI::db"
4

2 に答える 2

1

私が見つけた1つの解決策はこれでした:

use Encode qw(encode_utf8);

次に、ファイルまたはその他の場所にデータを書き込む場所で、Encode::encode_utf8($data);

ここ$dataで、はMSSQLからフェッチした列/値です。

于 2011-10-05T04:54:48.070 に答える
1

私はDBD::Sybaseを使用していませんが、a)他の多くのDBDを使用しており、b)現在DBDでのUnicodeサポートに関する情報を収集しています。ポッドによると、syb_enable_utf8を使用する場合は、少なくともOpenClient15.xが必要です。15.x以降を使用していますか?クライアントが15.x未満の場合、またはDBD :: Sybaseのバージョンが古すぎる場合は、syb_enable_utf8が定義されていない可能性があります。残念ながら、syb_enable_utf8が追加されたとき、変更ファイルからはわかりません。

ただし、「メソッドが見つかりません」と言うと、syb_enable_utf8はメソッドではなく、ポッド内の属性(Sybase固有の属性の下にあります)であるため、これが手がかりになると思います。したがって、接続呼び出しに追加するか、次のような接続ハンドルを介して設定する必要があります。

my $h = DBI->connect("dbi:Sybase:something","user","password", {syb_enable_utf8 => 1});

また

$h->{syb_enable_utf8} = 1;

syb_enable_utf8がUNIVARCHAR、UNICHAR、およびUNITEXT列にのみ適用されるドキュメントから表示されるように設定されている場合に何が起こるかを説明するポッドのビットも読む必要があります。

最後に、最初にデータを正しく挿入する必要があります。syb_enable_utf8およびcharset=utf8を使用してPerlから挿入されておらず、挿入する前にデータがPerlの適切なユニコード文字でない場合は、ガベージが返されます。

Raze2dustが行ったコメントはあなたの問題とは何の関係もありませんが、データベースから取得したデータを他の場所に書き込む場合は注意する価値があります。スクリプトへのデータ入力をデコードし、データ出力をエンコードすることを忘れないでください。

于 2011-10-05T08:40:19.080 に答える