web-dev-qa-db-ja.com

バイナリデータを使用したSQLクエリ(PHPおよびMySQL)

このサイトは以前は私を大いに助けてくれましたが、今は迷子になっています。よろしくお願いします。

以下の例のように、バイナリ値を含むMySQLテーブルがあります。テーブルを変更できません。

CREATE TABLE `test` (
   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
   `nid` binary(16) NOT NULL,
   `test` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`))

これはnidの値の例です:ÞFÈ>ZPÎ×jRZ{æ×(すべてが表示されているわけではありませんが、16個すべてが表示されています)

次に、この値がtrueである行のIDを探すSQLクエリを作成します。

SELECT id FROM test WHERE nid = 'ÞFÈ>ZPÎ×jRZ{æ×';

... 動作しません。何か案が?

[〜#〜] solution [〜#〜] HEX形式でnidを取得することでうまくいきました。結果はDE46C83E5A50CED70E6A525A7BE6D709になり、このようなクエリでこれを使用すると...

SELECT id FROM test WHERE HEX(nid) = 'DE46C83E5A50CED70E6A525A7BE6D709';

私は正しい結果を得ています。

15
user2007877

:これはバイナリデータをアドレス指定しますが、暗号化データはアドレス指定しません。暗号化されたデータの検索については、 この回答 を参照してください。

検索に使用するバイナリデータの前にXx、または0xを追加してみてください。

SELECT id FROM test WHERE pid = '0xÞFÈ>ZPÎ×jRZ{æ×';

編集:これも試してください:

SELECT id FROM test WHERE BINARY pid = 'ÞFÈ>ZPÎ×jRZ{æ×';

[〜#〜]または[〜#〜]

SELECT id FROM test WHERE HEX(pid) = BIN2HEX('0xÞFÈ>ZPÎ×jRZ{æ×');

ここで想定されているように: バイナリフィールドで選択する方法?(php、mysql)

上記の作業から何も起こらない場合:pidの形式でHEXを取得してみてください。

SELECT id, HEX(pid) pid, test FROM test

そして、検索するときは、次のことだけを試してください。

SELECT id, test FROM test WHERE HEX(pid) = '{$my_pid}'

しかし、どのようにしてpidデータをPHPに取得するのか、あるいはバイナリデータをselect - whereクエリに渡すのかどうかさえわかりません...推測するだけです。 phpタグが原因です。.

11
shadyyx

試してください:

X''   --Hex Content

mysql> SELECT x'4D7953514C';
    -> 'MySQL'
3
jixiang

Jixiangからの最後の投稿は、バイナリフィールドを検索するための正しい方向を示しました。

SELECT * FROM test WHERE yourBinaryColumn = x'binarystuffdata';

これは私のために働きます...

2
Snow