[pgsql-jp: 29000] Re: 7.3.xのJDBC ドライバで,特定文字のみ文字化け
Tatsuo Ishii
t-ishii @ sra.co.jp
2003年 2月 10日 (月) 20:10:30 JST
石井です.
(私がやったわけではありませんが)7.3での文字コード変換のマッピング変
更があちこちで波紋を呼んでいるようですね.
> PostgreSQL のソースを変更しないですむワークアラウンドとしては、
>
> ・これまでにも出ましたが JVM との入出力を MS932 変換にしてしまう。
> 1.4 ならば Windows-31J などです。
> # Shift_JIS はJDKのバージョンにより変換が異なりますので注意してください
>
> ・PostgreSQL のコンバータを使わない
> PostgreSQL を Unicode にして psql も Unicode にする。
第3の方法としては,7.3で追加されたCREATE CONVERSIONを使ってMS932変換で
ない新しい変換(CONVERSION)を作る方法があります.EUC_JP絡みのCONVERSION
は,以下のように検索できます.
test=# select * from pg_conversion where conforencoding = 1 or contoencoding = 1;
conname | connamespace | conowner | conforencoding | contoencoding | conproc | condefault
-----------------+--------------+----------+----------------+---------------+----------------+------------
euc_jp_to_sjis | 11 | 1 | 1 | 28 | euc_jp_to_sjis | t
sjis_to_euc_jp | 11 | 1 | 28 | 1 | sjis_to_euc_jp | t
euc_jp_to_mic | 11 | 1 | 1 | 7 | euc_jp_to_mic | t
mic_to_euc_jp | 11 | 1 | 7 | 1 | mic_to_euc_jp | t
euc_jp_to_utf_8 | 11 | 1 | 1 | 6 | euc_jp_to_utf8 | t
utf_8_to_euc_jp | 11 | 1 | 6 | 1 | utf8_to_euc_jp | t
(6 rows)
たとえばEUC_JP <--> UTF-8 のCONVERSIONを入れ替えたい場合は,マッピング
を変更した新しい関数を作り,pg_conversionから euc_jp_to_utf_8 と
utf_8_to_euc_jp をDROP CONVERSIONし,新しい関数をCREATE DEFAULT
CONVERSIONで登録すれば良いわけです.
pg_conversionをいじるのが怖い人は,schemaを使えば既存のCONVERSIONを変
更せずに済みます.すなわち,CREATE SCHEMAでユーザ名と同じ名前のスキー
マを作り,そのスキーマにCREATE DEFAULT CONVERSIONで新しいコンバージョ
ンを登録します.
まあ,これだけでは良くわからないでしょうから,実際にやってみたい方がい
らしたらまたお手伝いさせていただきます.
参考: src/backend/utils/mb/conversion_procs/README.euc_jp
--
Tatsuo Ishii
pgsql-jp メーリングリストの案内