Re: Unicode and Sybase univarchar

[email protected] (Dave Rolsky)
Newsgroups perl.dbi.users
Message-ID <[email protected]>
On Thu, 3 Jun 2010, Michael Peppler wrote:

> I just gave this a try - I'm under linux, with ASE 15.5. I created a table with a univarchar column, entered some data via isql, then wrote a minimal perl script to fetch the data.
>
> If I use a UTF8 locale (i.e. LANG=en_us.UTF8) I get the correct output.
> If I don't I do not get the correct output, at least for rows where non-ascii data has been entered into the table.

Define correct output here. From looking at the DBD::Sybase code, I don't 
see how it could possibly be right, because there's nothing in there to 
set the utf8 flag on the Perl string when the data is retrieved.

So even if I can work around the bizarro "bytes as a string" issue, I 
still won't have utf8 after the round trip.

My test script did something like this:

     my $dbh = ...; # set charset to utf8

     round_trip("em dash: \x{2014}");

     sub round_trip {
         my $unicode = shift;

         $dbh->do('DELETE FROM unicode');

         check($unicode);

         $dbh->do( 'INSERT INTO unicode (utest) VALUES (?)', {}, $unicode );

         my $rows = $dbh->selectall_arrayref('SELECT * FROM unicode');

         my $fromdb = $rows->[0][0];

         check($fromdb);

         my $chars = do {
             use bytes;

             join q{}, map { chr( eval '0x' . $_ ) } $fromdb =~ /(....)/g;
         };

         check($chars);

         my $decoded = decode( 'utf-8', $chars );

         check($decoded);
     }

     sub check {
         my $string = shift;

         print "$string is utf8? ",
             ( Encode::is_utf8($string) ? 'yes' : 'no' ),
             "\n";
     }

     __END__

     CREATE TABLE unicode (
       utest  univarchar(250)  NOT NULL,
     );


-dave

/*============================================================
http://VegGuide.org               http://blog.urth.org
Your guide to all that's veg      House Absolute(ly Pointless)
============================================================*/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.