Я упростил свой код с целью объяснения проблемы, с которой я столкнулся.
У меня есть таблица в 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') в биты (сохраняя ее как подготовленный оператор)?
Спасибо