SQL查询与二进制数据(PHP和MySQL)

use*_*877 14 php mysql binary-data

这个网站过去帮了我很多,但现在我迷路了.在此先感谢您的指导.

我有一个包含二进制值的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`))
Run Code Online (Sandbox Code Playgroud)

这是nid的示例值:( ÞFÈ>ZPÎ×jRZ{æ× 并非所有显示,但所有16都在那里)

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

SELECT id FROM test WHERE nid = 'ÞFÈ>ZPÎ×jRZ{æ×';
Run Code Online (Sandbox Code Playgroud)

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

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

SELECT id FROM test WHERE HEX(nid) = 'DE46C83E5A50CED70E6A525A7BE6D709';
Run Code Online (Sandbox Code Playgroud)

我得到了正确的结果.

sha*_*yyx 11

注意:这解决了二进制数据,但没有加密数据.有关搜索加密数据,请参阅此答案.

尝试添加X,x0x在用于搜索二进制数据的前面:

SELECT id FROM test WHERE pid = '0xÞFÈ>ZPÎ×jRZ{æ×';
Run Code Online (Sandbox Code Playgroud)

编辑:尝试这个:

SELECT id FROM test WHERE BINARY pid = 'ÞFÈ>ZPÎ×jRZ{æ×';
Run Code Online (Sandbox Code Playgroud)

要么

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

假设在这里:如何选择二进制字段?(PHP,MySQL的)

如果没有从上面的工作原理:尝试获取pidHEX格式,如

SELECT id, HEX(pid) pid, test FROM test
Run Code Online (Sandbox Code Playgroud)

然后在搜索时只尝试:

SELECT id, test FROM test WHERE HEX(pid) = '{$my_pid}'
Run Code Online (Sandbox Code Playgroud)

但是我不确定你是如何获得pidPHP 的数据,甚至是否将二进制数据传递给你的select - where查询...只是猜测由于php标签...