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';
Я получаю правильный результат.
Ответы
Ответ 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';
Это работает для меня...