[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 メーリングリストの案内