I have hit a brick wall trying to insert UTF-8 characters into Oracle 9i from a Perl script and would appreciate any help anyone has to give.
I'm collecting user input from a web form (with UTF-8 encoding set in the content-type header), then trying to insert the data into an Oracle 9i table. What is happening is...
When the user input string = "ÃÃÄÄÄÄÃÃÃ", Oracle inserts "<x-tad-smaller>ÃâÃÂÃâÃÆÃâÃâÃÂÃâÃÆÃÂÃÂÃÂ" and utf8::is_utf8($user_input) returns TRUE.
... however ...
When the user input string = "ÃÃÃÃÃÃÃÃÃÃÃÃ", Oracle inserts the correct string and utf8::is_utf8($user_input) returns FALSE.
In both instances, the correct string prints to the screen, so I don't know why Oracle inserts something different when utf8::is_utf8($user_input) returns TRUE .
Code is below. Thanks in advance for the help.
use utf8;
use Win32::ODBC;
$ENV{NLS_LANG} = '.UTF8';
binmode STDOUT, ":utf8";
$user_input = pack "U0C*", unpack "C*", $user_input;
utf8::decode($user_input);
$db = new Win32::ODBC("DSN=DB;UID=username;PWD=password");
$db->Sql("UPDATE TEST_TABLE SET NAME = '" . $user_input. "' WHERE ID = 0;");
$db->Close();
print "Content-Type: text/html; charset=UTF-8\n\n";
print "<p>User entered: " . $user_input;
- Stuart Green</x-tad-smaller>