Я использую драйвер MySQL из http://github.com/go-sql-driver/mysqlGo/GoLang хранения двоичных данных в MySQL
Мне нужно хранить бинарное представление IP-адреса в MySQL в (4) колонке BINARY.
Чтобы сделать это, я попытался:
startSlice := net.ParseIP(rangeStart).To4()
var startBytes [4]byte
copy(startSlice[:], startBytes[0:4])
endSlice := net.ParseIP(rangeEnd).To4()
var endBytes [4]byte
copy(endSlice[:], endBytes[0:4])
r, e := db.Exec("UPDATE AIPRangesBlocks SET BinRangeStart = ?, BinRangeEnd = ? WHERE IPGRID = ?", startBytes, endBytes, id)
fmt.Println("result of update:", r)
if e != nil {
fmt.Println(e)
}
Обратите внимание, что я использовал команду копирования для преобразования из [] байт ломтика просто [4] массив байт, но я получаю эту ошибку: .
sql: converting Exec argument #0's type: unsupported type [4]uint8, a array
Если я делаю это непосредственно как net.ParseIP ("some_ip") to4(), я получаю эту ошибку:
sql: converting Exec argument #0's type: unsupported type net.IP, a slice
Как отправить бинарный файл данные?
EDIT
Хорошо, если я использую шестнадцатеричную строку, он будет выполнять запрос, но я не получаю правильные значения при извлечении.
Я пробовал hex.EncodeToString() и «0x» + hex.EncodeToString(), и ни один из них не работает должным образом.
Вот пример:
66.182.64.0 becomes 42b64000
Если я храню "42b64000" в моем колонке MySQL, я получаю обратно:
52 50 98 54
Если я храню "0x42b64000" в моем колонке MySQL, я получаю назад:
48 120 52 50
Как исправить это?