PostgreSQL の EUC→UTF 変換でエラー発生[PostgreSQL]
(2015-04-22 09:58:50) by shinoda


CentOS 上の PostgreSQL を Windows 8 Pro 上の A5:SQL Mk-2 64bit Edition Version 2.10.1(汎用SQL開発ツール/ER図ツール)を使って操作しているのだが、

character 0xfac9 of encoding "EUC_JP" has no equivalent in "UTF8"

のようなエラーが出て見れないテーブルがある。
元の DB が EUC-JP で作られており、それを UTF-8 に変換して結果を返そうとして PostgreSQL が出しているエラーのようである。
つまり、EUC-JP で 0xFAC9 である文字コードを、UTF-8 の 0xE6A192 に変換できないってことだな。

ちなみに問題の漢字は「?」。「桑」の俗字なんだけど、この字を使った苗字とか存在してて(俺も一人知ってる)、「?原」と書けば「くわばら」と読む。
一応、Shift_JIS や JIS、UTF-8、UTF-16 にも存在している文字である・・・が、「俗字」ということで、ハシラダカ「?」なんかと同じように、OS や DBMS によって実装で色々もめている文字ではある(^^;

PostgreSQL のソースに含まれる EUC-JP→UTF-8 変換用のマッピングファイル(src/backend/utils/mb/Unicode/euc_jp_to_utf8.map)を確認すると、確かに 0xFAC9 から 0xE6A192 への変換情報は存在していないようだ。

 〜
  {0xf4a5, 0xe5879c},
  {0xf4a6, 0xe78699},
  {0x8fa2af, 0xcb98},
  {0x8fa2b0, 0xcb87},
 〜

0xF4A6 の次は、もういきなり 3バイト EUC コードの 0x8FA2AF になってる。
(0xF9A1〜0xFCFE 間の 374文字は変換テーブルに載せてもらえてないようだ(^^;)

対応方法として、この間に、{0xfac9, 0xe6a192} という情報を追加してやって、もう一度 PostgreSQL をコンパイルしてやればいい。
(UTF-8→EUC-JP 変換用の utf8_to_euc_jp.map にも逆向きの情報を登録してやる必要あり)

が、これ、お客さんところの環境なので勝手にコンパイルするわけにもいかず(^^;

まあ、A5:SQL が UTF-8 への変換を要求しているのが問題なわけで、EUC-JP のまま使うのであれば問題ない。文字コード EUC-JP で SSH 接続して、ターミナル上で psql 使うしかないか(^^;

<参考>
文字コード表

コメント(5)
TOPへ戻る

Powered by
MT4i 3.0.8