Подтвердить что ты не робот

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-запрос для поиска идентификатора строки, где это значение истинно.

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

... не работает. Есть идеи?

РЕШЕНИЕ Получение низа в формате HEX делало трюк. Это приводит к DE46C83E5A50CED70E6A525A7BE6D709, и когда я использую это в запросе вроде этого...

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

Я получаю правильный результат.

4b9b3361

Ответ 1

Попробуйте добавить X, X или 0x перед двоичными данными, которые используются для поиска:

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

EDIT: попробуйте также:

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...

Ответ 2

попробовать:

X''   --Hex Content

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

Ответ 3

Последнее сообщение от jixiang направило меня в правильном направлении для поиска двоичного поля:

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

Это работает для меня...