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
バイナリデータを送信するにはどうすればよいですか?
16 進数の文字列を使用すると、クエリは実行されますが、取得時に正しい値が得られません。
hex.EncodeToString() と "0x" + hex.EncodeToString() を試しましたが、どちらも正しく機能していません。
次に例を示します。
66.182.64.0 becomes 42b64000
MySQL 列に「42b64000」を保存すると、次のように返されます。
52 50 98 54
MySQL 列に「0x42b64000」を保存すると、次のように返されます。
48 120 52 50
これを修正するにはどうすればよいですか?