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