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 个都在那里)

现在我想创建一个 SQL 查询来查找该值为 true 的行的 id。

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

...不起作用。任何想法?

解决方案 获得 HEX 格式的 nid 就可以了。它导致 DE46C83E5A50CED70E6A525A7BE6D709 并且当我在这样的查询中使用它时......

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

我得到了正确的结果。

4

4 回答 4

11

注意:这涉及二进制数据,而不是加密数据。请参阅此答案以搜索加密数据。

尝试在用于搜索的二进制数据前面添加 或Xx0x

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标签而猜测......

于 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 回答