pg_dumpとpg_dumpall、そこで文字エンコーディング
SJIS(SHIFT_JIS)に含まれない機種依存文字を含むCP932でPHPなどで受け、それをEUC_JPでエンコーディングしているPostgreSQLデータベースに保存しているのだけど、pg_dumpallのダンプファイルや、PhpPgAdmin上では機種依存文字が文字化けして黒菱型に「?」の字形で表示されているので、私は完全に「文字化けが発生している!困った困った!」と思い込んでいた。
だけど、「pg_dump -E SJIS」などと出力エンコーディングをSJISに強制したところ、機種依存文字がそのまま化けずに得られることがわかった。
試しに、「pg_dumpall -l foobar -U foobar -w -v -f dumpall_`date +%Y%m%d%H%M`.dump」としていたものを、「pg_dump -E SJIS -F p -v --column-inserts -U foobar -f all_`date +%Y%m%d%H%M`.dump foobar」みたいにしてみたところ、SJISでダンプファイルを得ることが出来た。 あぁ、「--column-inserts」を書いてしまうと、かなり時間が掛かるので、普段はつけないか、「--inserts」にした方がいいようだ。
それって、CP932固有の文字がEUC_JPとして表せる文字がないだけで、元のSJISに戻せば元の文字になるってことなのかな。









