У нас есть проблема с символами вне базового набора ASCII, которые отображаются в виде перевернутых вопросительных знаков в нашей базе данных Oracle 10g.
У меня есть следующий скрипт для загрузки некоторых тестовых данных. Сценарий сохраняется как Latin-1 / ISO-8859-1 на удаленном сервере UNIX из Komodo IDE:
#!/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
База данных, в которую она загружается, является базой данных Oracle 10g со следующими параметрами:
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_LANGUAGE ENGLISH
NLS_TERRITORY UNITED KINGDOM
NLS_CHARACTERSET WE8ISO8859P1
Единственный столбец в тестовой таблице имеет тип VARCHAR2 (255).
Несмотря на полный рабочий день, читающий об этих проблемах, я не знаю, что делать, чтобы решить / диагностировать точную проблему.
Я пробовал это как с использованием Encode, так и без него для кодирования строки SQL перед ее выполнением.
Спасибо