DBD::Oracle 1.16 Oracle 10g (client 10.1.0.3) Red Hat Enterprise Linux ES release 3 (Taroon Update 3) Perl 5.8.6 (multithreaded disabled) NLS_LANG="AMERICAN_AMERICA.AL32UTF8"; NLS_NCHAR="AL32UTF8"
I have found on my system that when I execute a SQL select statement, that the strings returned have Perl's internal utf8 flag turned on, as expected. However, if the same data selected is done via a stored procedure, the strings returned have their internal utf8 flag turned off. What I can then do is use _utf8_on in the Encode module to turn the flag on, but of course I would rather not have to. Are there other users with similiar set-ups successfully returning utf8 strings from Oracle via stored procedures and there is a problem with my set-up? Or have I stumbled upon something else? An example of my test script is below. (I'm in the process of upgrading from Oracle 8i and DBD::Oracle 1.12) Thanks, Alan #!/usr/bin/perl use strict; use DBI; use DBD::Oracle; use Encode qw( encode_utf8 is_utf8 _utf8_on); $ENV{NLS_LANG}="AMERICAN_AMERICA.AL32UTF8"; $ENV{NLS_NCHAR}="AL32UTF8"; my $dbh = DBI->connect( "dbi:Oracle:host=10.33.80.10;sid=DBSID", "name", "pass", { AutoCommit => 1 ,RaiseError => 1 } ); my $sth = $dbh->prepare("SELECT message FROM test WHERE id=1"); $sth->execute(); my $string = $sth->fetchrow_array; my $string_p; $sth = $dbh->prepare("BEGIN P_TEST.GET_MESSAGE(:1); END;"); $sth->bind_param_inout(1, \$string_p, 100); $sth->execute(); print "UTF Test on Select String: ".is_utf8($string)."\n"; print "UTF Test on Procedure String: ".is_utf8($string_p)."\n\n"; print "TURNING ON UTF8 FLAG\n"; _utf8_on($string_p); print "UTF Test on Procedure String: ".is_utf8($string_p)."\n\n";