[pgsql-jp: 25542] Re: bytea and multi-byte enabled PostgreSQL?

Tatsuo Ishii t-ishii @ sra.co.jp
2002年 4月 8日 (月) 15:21:41 JST


石井です.

> > 大垣です。
> > 
> > PHP4.2.0-dev (CVS version) と PostgreSQL 7.2.1を使っ
> > ています。
> > 
> > PQescapeBytea()関数がPostgreSQL7.2のlibpqからサポート
> > されています。PHP4.2.0からこの関数がpg_escape_bytea()
> > としてサポートされますが、テストしていて以下の様なエラーに
> > あたりました。
> > 
> > Warning: pg_query() query failed:  ERROR:  Invalid EUC_JP character
> > sequence found (0xf75c)
> >  in escape.inc on line 40
> > 
> > Scriptはphp.gifをファイル関数で読み込みテーブルに挿入し
> > ようとしています。
> > 
> > $fp = fopen('php.gif','r');
> > $image = fread($fp, filesize('php.gif');
> > $escaped = pg_escape_bytea($image);
> > $sql = "INSERT INTO php_pgsql_test (num, bin) VALUES (1, '".$escaped."');"
> > 
> > テーブル定義は以下の通りです。
> > 
> > test=# \d php_pgsql_test
> >     Table "php_pgsql_test"
> >  Column |  Type   | Modifiers
> > --------+---------+-----------
> >  num    | integer |
> >  str    | text    |
> >  bin    | bytea   |
> > 
> > 
> > バイナリデータをEUC-JPテキストとして取り扱っている為、上
> > 記のエラーが発生していると思います。
> 
> 変ですねぇ。EUC-JPとしてのエンコーディングチェックはbyteaには適用され
> ないはずなのですが.こちらには PHP4.2.0-dev の環境がないのですが,
> $escapedの内容を教えて頂ければ再現テストできます.

この件ですが,大垣さんからテストデータをいただき,原因がわかりました.
その結果,

(1) INSERT するときに bytea型にcastする

(2) PostgreSQLのlibpq関数PQespacpeBytea()を修正する

のどちらかの対処が必要なことが分かりました.現在開発中のcurrentおよび
7.2.2では,すでに(2)の対処がされています.

必要でしたら,(2)の修正を7.2.1に行うパッチを提供できますが,いかがしま
しょう? > 大垣さん
--
Tatsuo Ishii



pgsql-jp メーリングリストの案内