Этот сайт очень помог мне в прошлом, но теперь я потерян. Заранее благодарим за руководство.
У меня есть таблица 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';
Я получаю правильный результат.
Попробуйте добавить 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
…
пытаться:
X'' --Hex Content mysql> SELECT x'4D7953514C'; -> 'MySQL'
Последнее сообщение от jixiang указывало мне в правильном направлении для поиска двоичного поля:
SELECT * FROM test WHERE yourBinaryColumn = x'binarystuffdata';
Это работает для меня …