Отправка битового ввода в хранимую процедуру MySQL в Go - PullRequest
0 голосов
/ 27 января 2019

Я упростил свой код с целью объяснения проблемы, с которой я столкнулся.

У меня есть таблица в MySQL 5.7 со столбцом BIT (10). Я написал хранимую процедуру, которая выполняет вставку.

BEGIN
    INSERT INTO mytable (mycolumn) VALUES (mybinary);
END

В Go я просто хочу вызвать эту хранимую процедуру. Например:

rows, err := db.Query("CALL my_proc(?)", "1110110101");

Однако из MySQL я получаю следующую ошибку:

Error 1406: Data too long for column 'mycolumn' at row 1

Мне кажется, я знаю причину этой ошибки. MySQL получает двоичное число в виде строки. Строки хранятся с использованием гораздо большего количества битов. Поэтому, когда она преобразует строку в биты, она получает несколько битов на символ, поэтому она слишком длинная. Я знаю, что в MySQL вы можете экранировать строку, чтобы показать, что она является двоичной:

INSERT INTO mytable (mycolumn) VALUES (b'1110110101');

Но в приведенной выше хранимой процедуре, как я могу экранировать строку (как строковую переменную 'mybinary') в биты (сохраняя ее как подготовленный оператор)?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...