我正在使用来自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 命令将 []byte 切片转换为简单的 [4]byte 数组,但出现此错误:
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
我该如何解决?
收到一只叮咚
天涯尽头无女友
相关分类