[pgsql-jp: 39380] Re: BYTEA型の値の検索方法

ITAGAKI Takahiro itagaki.takahiro @ oss.ntt.co.jp
2008年 5月 7日 (水) 09:45:49 JST


"Imaoka Yumiko" <shinoi @ osk2.3web.ne.jp> wrote:

> 暗号化されたバイナリデータとしてbytea型でDBに格納
> されています。
> それをWHERE文でlike検索ではなく"="の完全一致で
> 引っ掛けるべく入力値を暗号化し、insert文にはめ込む時と
> 同様にPHPの関数pg_escape_byteaを通してselect文を
> 作成しクエリ送信するのですが、該当件数ゼロで返ってきます。

psql から直接SQLを叩いてみた限りでは、特におかしな動作は見られませんでした。
INSERT時とSELECT時で、暗号後の値が異なっているのかもしれません。
PHPでのSQL送信前か、PostgreSQL で log_min_duration_statement などを使って、
SQL をダンプして確認されてはいかがでしょうか。

=# CREATE TABLE tbl (id serial, data bytea);
=# INSERT INTO tbl(data) VALUES('ABC');
=# INSERT INTO tbl(data) VALUES(E'\\001\\002');
=# SELECT * FROM tbl WHERE data = 'ABC';
 id | data 
----+------
  1 | ABC  
(1 row)

=# SELECT * FROM tbl WHERE data = E'\\001\\002';
 id |   data
----+----------
  2 | \001\002
(1 row)

------------------------------------------------------------
板垣貴裕 <itagaki.takahiro @ oss.ntt.co.jp>





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