17

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

次の例のように、バイナリ値を含む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{æ×';

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

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

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

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

4

4 に答える 4

11

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

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}'

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

于 2013-01-24T16:12:26.457 に答える
4

試す:

X''   --Hex Content

mysql> SELECT x'4D7953514C';
    -> 'MySQL'
于 2014-05-08T10:17:24.023 に答える
3

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

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

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

于 2016-02-24T19:23:17.243 に答える
1

私にとっては、バイナリフィールドに引用符なしで機能します

SELECT * FROM `clients_addresses` WHERE client_id = 0x4f8472e23e63404fb8f9f56
于 2020-04-13T16:30:13.103 に答える