gpt4 book ai didi

perl - Perl,DBD::Oracle和Oracle 10g的字符集问题

转载 作者:行者123 更新时间:2023-12-01 13:15:31 26 4
gpt4 key购买 nike

在Oracle 10g数据库中,基本ASCII字符集以外的字符显示为上下颠倒的问号时,我们遇到了问题。

我有以下脚本来加载一些测试数据。该脚本通过Komodo IDE在远程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

它加载到的数据库是具有以下参数的Oracle 10g数据库:
NLS_NCHAR_CHARACTERSET  AL16UTF16
NLS_LANGUAGE ENGLISH
NLS_TERRITORY UNITED KINGDOM
NLS_CHARACTERSET WE8ISO8859P1

测试表上的单列类型为VARCHAR2(255)。

尽管全天候阅读这些问题,但我真的不知道该怎么做才能解决/诊断确切的问题。

在执行之前,无论是否使用Encode对SQL字符串进行编码,我都尝试过这样做。

谢谢

最佳答案

当您收到倒置的问号时,如何检索数据?您要在其中检索数据的客户端上的NLS_LANG环境变量是什么?

在SQL * Plus中,您可以运行吗

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

并发布结果? DUMP函数显示数据库中实际存储的内容-它将显示问题是存储重音字符还是问题在于获取重音字符。

关于perl - Perl,DBD::Oracle和Oracle 10g的字符集问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5567714/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com