Home > perl > Perlのutf8フラグとDBI::Pg - その2

Perlのutf8フラグとDBI::Pg - その2

Perlのutf8フラグとDBI::Pgの続き。

DBD::Pg で取得した文字列に自動的に utf8 フラグを付けるには、$dbh->{pg_enable_utf8} を 1 にする。 ただ、これは本当に utf8 フラグを付けるということしかしないようなので、client_encoding を utf8 にするのは自分でやらなきゃいけないようだ。 client_encoding と連動してくれても良さそうな気もする。

データベースが euc-jp、ソースコードが utf-8 の例はこんな感じ。

#!/usr/bin/perl
use Encode;
use DBI;
use Data::Dumper;

my $dbh = DBI->connect("dbi:Pg:options='-c client_encoding=utf8'", "", "");
my $q = "select 'あいうえお'::text";

$dbh->{pg_enable_utf8} = 1;
my $s = $dbh->selectall_arrayref($q)->[0][0];
print utf8::is_utf8($s) ? "utf8": "not utf8", "\n";
print Encode::encode_utf8($s), "\n";

ところで、この pg_enable_utf8 は、取得した値のデータ型見て、text 型や varchar 型などの文字列型であれば utf8 フラグを付ける。その為以下のコードだと utf8 フラグは付かない。

my $q = "select 'あいうえお'";

何故かというと、明示的な型指定がない文字列リテラルは、PostgreSQL では unknown 型だからだ。

Writeback:3

from 2007/01/31 (Wed) 01:19:44
from 2007/02/05 (Mon) 15:37:29
from 2007/08/18 (Sat) 17:59:09
Comment Form

writeback message: Ready to post a comment.

TrackBack ping me at
http://www.mono-space.net/blog/perl/e060731_utf8.trackback

Page Top