我正在使用http://github.com/go-sql-driver/mysql的MySQL驱动程序 我需要将MySQL中的IP地址的二进制表示存储在BINARY(4)列中。 要做到这一点,我试过了:
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) }请注意,我使用copy命令将[]字节切片转换为[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我如何发送二进制数据? 编辑 好的,如果我使用十六进制字符串,它将执行查询,但我没有得到正确的检索值。 我试过hex.EncodeToString()和“0x”+ hex.EncodeToString(),都没有正常工作。 这是一个例子:
66.182.64.0 becomes 42b64000如果我在我的MySQL专栏中存储“42b64000”,我会回到:
52 50 98 54如果我在我的MySQL列中存储“0x42b64000”,我会回到:
48 120 52 50我该如何解决?