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

Tatsuo Ishii t-ishii @ sra.co.jp
2002年 4月 8日 (月) 22:00:27 JST


石井です.

> > (1) INSERT するときに bytea型にcastする
> > 
> > (2) PostgreSQLのlibpq関数PQespacpeBytea()を修正する
> > 
> > のどちらかの対処が必要なことが分かりました.現在開発中のcurrentおよび
> > 7.2.2では,すでに(2)の対処がされています.
> 
> ありがとうございます!
> 
> > 
> > 必要でしたら,(2)の修正を7.2.1に行うパッチを提供できますが,いかがしま
> > しょう? > 大垣さん
> 
> (1)の方法をとらせて頂きます。
> INSETは正しく行なえました。

言うのを忘れていましたが,PostgreSQLのフロントエンドとバックエンドのエ
ンコーディングが違っていると,やはり「文字コードが正しくない」エラーに
なると思います.この問題は(2)によってしか対処できません.
# PHPとはあまり関係ありませんが.

> FAQのような気がしますが、BYTEA型のデータをSELECTしたした場合
> "\000\320"の\OCTAL形式文字列が返ってきますが、これは仕様で戻り
> 値はユーザーが変換すると言う事でよいのでしょうか?

はい,そうです.

> "SELECT bin FROM table"
> "SELECT bin::BYTEA FROM table"
> "SELECT CAST (bin AS BYTEA) FROM table"
> すべてエスケープ処理された値が返ってきます。
> 
> 変換関数を別に自分で書いても大した事はないのですが、同じ物を2度実装
> しても時間の無駄なのでお聞きします。

実は開発中の current には PQunescapeBytea という関数が実装されており,
octalからバイナリへの変換をやってくれます.こちらの方も修正して,

PQescapeBytea --> bytea 型に insert --> select --> PQunescapeBytea

という方法で,バイナリデータをストアして再びバイナリで取り出せることを
確認しています.
--
Tatsuo Ishii




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