3

基本的なASCIIセット以外の文字が、Oracle10gデータベースで逆さまの疑問符として表示されるという問題があります。

いくつかのテストデータをロードするための次のスクリプトがあります。スクリプトは、KomodoIDEからリモートUNIXサーバーにLatin-1/ISO-8859-1として保存されます。

#!/wload/espd/app/perl/bin/perl

use strict; 
use warnings;
use Encode;
use esp_libs_db;
my $dbh = espDbConnectNew();

my $sql = q{ INSERT INTO DBUSER.test VALUES ('qwérty')};

#$sql = encode("iso-8859-1", $sql);

my $rows = $dbh->do($sql)  or Carp::croak "ERROR: PM_DB_0010:[" . $DBI::errstr . "]   Cannot run stmt:\n";;
print $rows;
$dbh->commit();
$dbh->disconnect();



sub espDbConnectNew {
    my ( $database ) = @_;    
    my %connectionStrings = &esp_libs_db::espGetConnectionStrings( $database );

    # Set Environment Variables
    $ENV{ORACLE_SID}=$connectionStrings{"SID"};
    $ENV{ORACLE_HOME}=$connectionStrings{"HOME"};
    my $dbh = DBI->connect("dbi:Oracle:SID=$connectionStrings{'SID'};HOST=$connectionStrings{'HOST'};PORT=$connectionStrings{'PID'}",
    "$connectionStrings{'USER'}","$connectionStrings{'PWD'}",
    {PrintError=>0,
    RaiseError => 0,
    AutoCommit => 0}
) or Carp::croak "ERROR: PM_DB_0003:  Cant connect to db:\n";


    return $dbh;
} #espDbConnect

ロードするデータベースは、次のパラメータを持つOracle10gデータベースです。

NLS_NCHAR_CHARACTERSET  AL16UTF16
NLS_LANGUAGE    ENGLISH
NLS_TERRITORY   UNITED KINGDOM
NLS_CHARACTERSET    WE8ISO8859P1

テストテーブルの単一の列は、タイプVARCHAR2(255)です。

これらの問題について丸一日読んでいるにもかかわらず、正確な問題を解決/診断するために何をすべきか本当にわかりません。

実行する前に、Encodeを使用してSQL文字列をエンコードする場合と使用しない場合の両方でこれを試しました。

ありがとう

4

1 に答える 1

1

逆さまの疑問符を取得した場合、どのようにデータを取得していますか?データを取得しているクライアントのNLS_LANG環境変数は何ですか?

SQL * Plusでは、実行できますか

SELECT dump( column_name, 1013 ), column_name
  FROM DBUSER.test

結果を投稿しますか?DUMP関数は、データベースに実際に保存されているものを示します。これは、問題がアクセント付き文字の保存にあるのか、問題がアクセント付き文字の取得にあるのかを示します。

于 2011-04-06T14:15:45.130 に答える