NpgsqlはデフォルトではShift-JISになる

UTF-8で作ったデータベースに対して、Npgsql(ADO.NETプロバイダ)からアクセスしたところ、文字化け。
困ったにゃあということで、実行をトレースしていくと、NpgsqlConnector::Open() において

Encoding = Encoding.Default;

となっているところにぶつかりました。
Encoding.Defaultは「オペレーティングシステムの現在のANSIコードページのエンコーディングを取得」するプロパティです。
日本でのデフォルトは、CP932(シフトJIS+独自拡張)のようです。UTF-8のバイト列が返ってきてこれをCP932として文字列を作ろうとしてもダメなのは当然。
じゃあUTF-8のデータベースはどうすんだよ、と思ってたのですが、"Encoding.UTF8" で、UTF8のEncodingオブジェクトを返すわけで、UTF8対応しているのだったら、これがソースのどこかに潜んでいると思ってソースを検索すると、接続文字列で"ENCODING"という指定があることを発見。"ENCODING=UNICODE"を接続文字列に追加すればうまくいきました。
ていうかマニュアル(http://www.postgresql.jp/document/NPGSQL/manual/UserManual_J.htm)を見ろよと言っておきたいです。