このサイトは以前は私を大いに助けてくれましたが、今は迷子になっています。よろしくお願いします。
以下の例のように、バイナリ値を含む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';
私は正しい結果を得ています。
注:これはバイナリデータをアドレス指定しますが、暗号化データはアドレス指定しません。暗号化されたデータの検索については、 この回答 を参照してください。
検索に使用するバイナリデータの前にX
、x
、または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
タグが原因です。.
試してください:
X'' --Hex Content
mysql> SELECT x'4D7953514C';
-> 'MySQL'
Jixiangからの最後の投稿は、バイナリフィールドを検索するための正しい方向を示しました。
SELECT * FROM test WHERE yourBinaryColumn = x'binarystuffdata';
これは私のために働きます...