[Wellington-pm] More on Unicode and DB

Srdjan srdjan at catalyst.net.nz
Mon Sep 17 21:37:12 PDT 2007


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Is that deficiency of DBI::Pg or postgres client library?

Grant McLean wrote:
> Hi Mongers
> 
> In my talk about Unicode the other month, one subject I didn't get time
> to explore properly was working with databases.  I've now done a little
> more of work in this area with Postgres.
> 
> The initial question was how to 'round-trip' a Unicode string.
> 
> For example say I insert a row with a text field containing the string
> 'Māori' (or "M\x{101}ori" in ASCII Perl).  This string is 5 characters
> long, but 6 bytes long because the second character is a multibyte
> character.
> 
> I found that if I subsequently queried that value what I got back was
> effectively a binary string.  It's the same 6 bytes I inserted but
> without the UTF8 flag set on the Perl scalar, so it appears to be a 6
> character string.
> 
> I could use Encode::decode to translate that into a scalar with the UTF8
> flag set but that's a bit tedious.
> 
> It turns out that the Postgres driver (DBD::Pg) has a flag which can be
> set to do the decoding automatically, e.g.:
> 
>   my $attr = {
>       RaiseError     => 1,
>       AutoCommit     => 0,
>       pg_enable_utf8 => 1,
>   };
> 
>   my $dbh = DBI->connect($dsn, $user, $passwd, $attr);
> 
> With the pg_enable_utf8 flag set, Unicode strings are round-tripped
> correctly automatically.
> 
> It's mildly concerning that this flag is labelled "experimental and may
> be subject to change" but I'm sure if it was changed it would only be
> for the better :-)
> 
> Cheers
> Grant
> 
> _______________________________________________
> Wellington-pm mailing list
> Wellington-pm at pm.org
> http://mail.pm.org/mailman/listinfo/wellington-pm
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFG71X4ZtcHxCitRpgRAuspAJ9SQf9nN5Jq/LQUK1vzhyCHKlv0XgCfUbM0
C350+TLXlMxZbRcchd8ytss=
=Snpa
-----END PGP SIGNATURE-----


More information about the Wellington-pm mailing list