perlのUTF-8環境にて、DBエラーが出る

今の開発は、DB, HTML, プログラムの文字コードを全てUTF-8で統一している。そうすると、charsetがutf-8になるので、ブラウザから送信される文字もutf-8になる。それを受け取って、DBにutf-8で書き込む。DBのデータを画面に出力する場合もDBからUTF8でデータを取得し、それをhtmlに出力してブラウザに送信するだけ。これで、全てUTF-8に統一できて、文字コード変換が必要ないので、変な文字化けに悩まされずにすむ。

と思ってたら、、ある文字を入力すると文字化け、もしくは「DBD::Pg::st execute failed: ERROR: invalid UTF-8 byte sequence detected near byte ....」というDBエラーが出た。
環境は、PostgreSQL8 + perl5.6 + DBD::PGです。

何でかなぁと思ってたら、どうやらCGIモジュールのescapeHTMLメソッドを使っている箇所で発生している模様。

CGIモジュールは、インスタンスを生成した後に、以下のような感じでcharsetを指定しないとデフォルトで、ISO-8859-1として扱うため、変に文字コード変換されてひっかかったみたい。

my $cgi = new CGI;
$cgi->charset('utf-8');