[pgsql-jp: 35983] encode() における bytea 型のバックスラッシュの扱い
Ryo HAYAKAWA
ryo @ fastriver.net
2005年 9月 9日 (金) 16:50:09 JST
はじめまして。早川と申します。
encode() 関数を使用して bytea 型のデータをテキスト型に変換
しようとしています。この際のバックスラッシュ文字の扱いにつ
いて不明な点がございます。どなたがご存知の方がいらっしゃっ
たらご教示いただければと思いメール致しました。
以下のように encode() 関数を使用して、「\101」という bytea
型の値が「A」に変換されると思います。
pgdb=> select encode('\\101'::bytea, 'escape');
encode
--------
A
(1 row)
しかしながら、同様なことを、バックスラッシュを表す「\134」
という bytea 型の値に対して行うと、「\」ではなく「\\」とい
う結果が得られます。
pgdb=> select encode('\\134'::bytea, 'escape');
encode
--------
\\
(1 row)
以下のようにしても同様です。
pgdb=> select encode('\\\\'::bytea, 'escape');
encode
--------
\\
(1 row)
私としては「\」を期待しているのですが、これは何故でしょうか。
また、SQL レベルで回避する方法をご存知の方いらっしゃいます
でしょうか。
ちなみに、libpq の PQunescapeBytea()を使用すると、「\\」は
「\」に変換してくれるようです。以下のコードで試しています。
#include <stdio.h>
#include <libpq-fe.h>
int main(){
char *out;
size_t outsize;
out = PQunescapeBytea("\\\\", &outsize);
printf("unescape Result = %s\n", out);
}
-- はやかわ
pgsql-jp メーリングリストの案内