PerlのDBIモジュールで自動的にUTF8フラグを付ける

コピペ用

#!/usr/bin/perl --

use strict;
use DBI;
use DBD::Pg;
use DBD::mysql;
use utf8;

# -- DBI 接続
my $dbh = DBI->connect (
    $config{db_dsn} , 
    $config{db_user} ,
    $config{db_password} ,
    {
        RaiseError        => 1 ,
        PrintError        => 0 ,
        AutoCommit        => 1 ,
        pg_enable_utf8    => 1 , # 結果をUTF8フラグ付きにする(PostgreSQL)
        mysql_enable_utf8 => 1 , # 結果をUTF8フラグ付きにする(MySQL)
    }
);

解説

DBIモジュールを使用してデータベースに接続する際に、上記のハイライト部分を追加しておきます。 それぞれPostgreSQLとMySQLで指定方法が違います。
こうしておくことで、上記のDBハンドラで取得した文字列は自動的に内部文字列(いわゆるUTF8フラグが付いた文字列)になります。
Encodeモジュールのdecode()などを使ってPerl内部文字列に変換する手間が省けるので、お勧めです。

確認したバージョン

  • DBI 1.63
  • DBD::Pg 3.0.0
  • DBD::mysql(未確認)