Unfortunety I cannot say for 100% sure this will solve you problem as there
is no way to exactly match your system's setup. Oracle
version/patches/Oracle client system enviornment etc.
There were a large number of improvements in UTF encoding since 1.12 so my
only sugestion is for you to install DBD::Oracle 1.19 locally on a seperate
machine and then test to see if the bug continues.
The UTF bug like this could be caused by the Oracle cleint or the Oracle DB
as well and not just DBD::Oracle.
What are you Oracle client and DB versions?
----- Original Message -----
From: "Anand.K.S." <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Thursday, December 21, 2006 1:17 AM
Subject: utf8 encoding problem
Hello,
I had posted this question in CPAN forum but i was directed here for a
better answer.
Here is the problem I am facing. In the following piece of code I get a
customer name from the database and append a pound symbol to the customer
name and update the same in the database. The NLS_LANG parameter is set to
AMERICAN_AMERICA.WE8DEC (western European character set) When I query the
database to see if the name has been updated correctly I see some garbage
value appended to the name instead of just a pound symbol. Then I did some
research to find out the version oralce DBD version being used is 1.12. I
found some difference between 1.12 and 1.14 relating to unicode
documentation. All I want to know is whether this was a bug in 1.12 which
was fixed in the later version of 1.14 and will an upgrade to 1.14 fix
this
problem. Could anyone please confirm me on this? The closer I could get
was
to find this link http://search.cpan.org/dist/DBD-Oracle/Changes#___top.
However the work around was to use "use Encoding" (Which is commented out
in
the following code) in perl which fixed the problem.
Cheers,
Anand.
use strict;
use encoding 'utf8';
use atadb;
use vars qw($opt_u);
my $db = atadb::connect($opt_u);
my $sql = " SELECT NODE_NAME FROM CUSTOMER_NODE_HISTORY WHERE
CUSTOMER_NODE_ID = 9295370 ";
my $csr = $db->prepare($sql) || ataerr::dbprepare($db);
$csr->execute() || ataerr::dbexecute($db);
my $node_name = $csr->fetchrow; $csr->finish;
$node_name = 'wre'; my $pound = " \xc2\xa3"; print "Pound =>$pound\n";
my $node_name_upper = "\U$node_name\E".$pound; $node_name.=$pound; print
"Node name".$node_name."\n";;
print $node_name_upper."\n"; my $sql1 = "UPDATE CUSTOMER_NODE_HISTORY SET
NODE_NAME = ? , NODE_NAME_UPPERCASE = ? WHERE CUSTOMER + +_NODE_ID =
9295370
";
my $csr1 = $db->prepare($sql1) || ataerr::dbprepare($db); print "Executing
... \n"; #use Encode; #$node_name = encode($ENV{PERL_ENCODING},
$node_name);
#$node_name_upper = encode($ENV{PERL_ENCODING}, $node_name_upper);
$csr1->execute($node_name, $node_name_upper) || ataerr::dbexecute($db);
print "Committing ... \n";
$db->commit || die("commit: ".$db->errstr."\n");
$csr1->finish; $db->disconnect;