Представление типа MySQL BINARY

Существует параметр запроса MySQL типа BINARY. Двоичные значения в MySQL могут быть представлены как x'1f7a8e'. Однако при добавлении параметра типа MySqlDbType.Binary к MySqlCommand запрос формируется со значением, представленным как _binary '1f7a8e', из-за чего запрос не может найти строку. Ниже вы можете увидеть пример кода того, как используется MySQL API.

var baz = "1f7a8e";
var cmd = new MySqlCommand("SELECT foo FROM bar WHERE baz=@baz");
cmd.Parameters.Add("@baz", MySqlDbType.Binary).Value = baz;

// Execute query and read result

Каким будет правильный способ использования двоичного значения в качестве параметра?


person Philipp    schedule 05.10.2017    source источник
comment
вы пробовали Stream или byte[]?   -  person Daniel A. White    schedule 05.10.2017
comment
Это кажется странным дизайном и/или сценарием. Разве это не работает, если вы просто преобразуете строку в байты в соответствии с здесь< /а>?   -  person stephen.vakil    schedule 05.10.2017


Ответы (2)


Я пытался сохранить Guid как BINARY(16).

Сначала я попробовал guid.ToByteArray(), но это не сработало. Затем я попробовал guid.ToString().Replace("-", ""), который также не удался.

Благодаря @daniel-a-white я попробовал guid.ToString().Replace("-", ""), а затем преобразовал полученное шестнадцатеричное число в массив байтов (как описано здесь) и это сработало.

person Philipp    schedule 05.10.2017

Вы можете сохранить GUID как Binary (16)

UNHEX(REPLACE(@baz, "-","")) 

Это вернет двоичный код (16).

И ВЫБРАТЬ

SELECT * FROM mytable WHERE HEX(baz) = @baz
person Allen King    schedule 05.10.2017