具有二进制数据的 SQL 查询(PHP 和 MySQL)

2022-08-30 23:32:15

这个网站过去对我帮助很大,但现在我迷路了。提前感谢您的指导。

我有一个包含二进制值的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的示例值:(并非所有显示,但所有16都在那里)ÞFÈ>ZPÎ×jRZ{æ×

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

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

...不起作用。有什么想法吗?

溶液以十六进制格式获取nid可以解决问题。它导致DE46C83E5A50CED70E6A525A7BE6D709,当我在这样的查询中使用它时...

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

我得到了正确的结果。


答案 1

注意:这会处理二进制数据,但不会处理加密数据。请参阅此答案以搜索加密数据。

尝试在用于搜索的二进制数据前面添加 , 或添加: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)

如果上面的内容不起作用:尝试获取 in 格式,如pidHEX

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

然后在搜索时仅尝试:

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

但是我不确定您如何获取PHP的数据,甚至不确定您是否将二进制数据传递到您的查询中...只是猜测由于标签...pidselect - wherephp


答案 2

尝试:

X''   --Hex Content

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

推荐