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


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

我有一个包含二进制值的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';

我得到了正确的结果。


8085
2018-01-24 16:07


起源

这个领域是 pid不是 nid。我不确定这是否是你的错字? - BenM
是的,这是一个错字,对不起。接得好 :) - user2007877
您应该使用nid = UNHEX('DE46C83E5A50CED70E6A525A7BE6D709')来使用nid上的任何索引 - Stuart Carnie


答案:


尝试添加 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}'

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


9
2018-01-24 16:12



测试了所有,没有。我确实看过上面提到的帖子,这就是我在这里问的原因。奇怪的东西。 :) - user2007877
您在查询中使用的二进制数据是从PHP出来的?你是如何获得这些数据的?你确定来自PHP的数据真的是二进制数据吗? - shadyyx
数据已在DB中。我在我的应用程序中使用PHP。我在MySQLWorkbench的值编辑器中看到了这一点:BINARY de 46 c8 3e 5a 50 ce d7 0e 6a 52 5a 7b e6 d7 09 - user2007877
@ user2007877从PHP打印时数据如何显示?我很确定在MySQl中它们表示为BINARY,但是关于PHP?可能PHP正在搞乱数据...... - shadyyx
PHP显示0xÞFÈ>ZPÎ×jRZ {æ× - user2007877


尝试:

X''   --Hex Content

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

3
2018-05-08 10:17





吉祥的最后一篇帖子向我指出了搜索二进制字段的正确方向:

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

这对我有用......


2
2018-02-24 19:23