fc2ブログ

Entries

postgreSQL の文字変換マップをカスタマイズ

諸々の事情によりEUC-JPのDBをダンプ→UTF8のDBにリストアするというスクリプトを毎日バッチで実行しているが、ある日突然エラーを吐いてデータのインポートができなくなった。

pg_restore: [archiver (db)] COPY failed: ERROR:  character 0xfce2 of encoding "EUC_JP" has no equivalent in "UTF8"

ということなので、EUC-JP の 0xfce2を確認してみると、「(はしごたか)」だった。この周りの文字はいろんなところでトラブルが起こる。「(たつさき)」も同様。

そこで、ほかのエンコードについても対応する文字の区点を調べてみる。
http://pentan.info/doc/sjis_list.html

SJIS  UTF8    UTF16 EUC-JP  JIS   文字 実体参照 重複
------------------------------------------------------
FBFC E9AB99 9AD9 FCE2  髙
EEE0 E9AB99 9AD9 8FF4FB  髙 *FBFC
FAB1 EFA891 FA11 F9F5  﨑
ED95 EFA891 FA11 8FF4BD  﨑 *FAB1
PostgreSQL では内部に文字変換テーブルを持っているようだが、Windows CP932でいう「漢字3」、0xFA40~0xFC4B 周辺の文字は各エンコード間で混乱しているため、あえて登録していないようだ。そこで、手動で文字変換マップに追加してみる。

参考:
http://ml.postgresql.jp/pipermail/pgsql-jp/2008-March/022864.html
http://ml.postgresql.jp/pipermail/pgsql-jp/2008-March/thread.html#22854
http://ml.postgresql.jp/pipermail/pgsql-jp/2008-March/022883.html
http://ml.postgresql.jp/pipermail/pgsql-jp/2007-January/021522.html

1. EUC->UTF8 マッピングファイルに追加
$ cd $SRC_DIR/src/backend/utils/mb/Unicode
$ vi euc_jp_to_utf8.map

{0xfce2, 0xe9ab99},  /* はしごたか */
{0xf9f5, 0xefa891},  /* たつさき */


2. UTF8->EUC マッピングファイルに追加
$ vi utf8_to_euc_jp.map

{0xe9ab99, 0xfce2},  /* はしごたか */
{0xefa891, 0xf9f5},  /* たつさき */

※ コード順に並ぶように挿入しないといけないので注意。


3. マッピングファイルをコンパイル/インストール
$ cd ../conversion_procs/utf8_and_euc_jp
$ make clean
$ make
$ make install

4. DB に反映
$ psql -U username db01
db01-> DROP CONVERSION pg_catalog.euc_jp_to_utf8;
db01-> CREATE DEFAULT CONVERSION pg_catalog.euc_jp_to_utf8 FOR 'EUC_JP' TO 'UTF8' FROM euc_jp_to_utf8;
db01-> DROP CONVERSION pg_catalog.utf8_to_euc_jp;
db01-> CREATE DEFAULT CONVERSION pg_catalog.utf8_to_euc_jp FOR 'UTF8' TO 'EUC_JP' FROM utf8_to_euc_jp;


これで、翌日からバッチのエラーは出ないようになり、(はしごたか)もちゃんとインポートできるようになった。

その他参考:
日本語文字コード
http://charset.7jp.net/


コメント

[C6] 承認待ちコメント

このコメントは管理者の承認待ちです

コメントの投稿

コメントの投稿

管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://grep.blog49.fc2.com/tb.php/87-e4aa31e3
この記事にトラックバックする(FC2ブログユーザー)

Appendix

検索フォーム


カレンダー

01 | 2024/02 | 03
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 - -

QRコード

QRコード