通常のMySQLINT型を主キーとして使用する場合、ユーザーは通常、 INT UNSIGNED
を使用して型を作成します。これは32b unsignedintです。 ただし、基本的なdb.sqlパッケージにはそのようなタイプはありません。
私はこれについてredditで議論し、誰もがこのタイプを書くことを提案しました。 しかし、これは再利用するためにライブラリにあるべきだと私には思えます。 これはMySQL固有のタイプ(バイトサイズは)であり、db.sqlパッケージにプッシュできないため、このライブラリに含める必要があると思います。
構造体はMySQLのデータ型を正しく表す必要があると思います。これにより、NullInt64を使用してデータをINT UNSIGNED
に保存するときに発生するオーバーフローが発生しなくなります。 BIGINT UNSIGNED
を使用する場合も同じです。その最大値はNullInt64に収まりません。
type MyTable struct {
ID uint
}
type MyOtherTable struct {
ID uint
MyTableID mysql.NullUint32 // Nullable relationship with MyTable
}
私はこれらのタイプを作成することができました、私はそれらを書く前に、あなたがそれらがこのパッケージに入っていても大丈夫かどうか尋ねたかっただけです。
ありがとうございました。
https://golang.org/pkg/database/sql/driver/#Valueに拘束されており、ドライバーはこれらの制約内でdatabase / sqlと通信しています。 database / sqlにないNullTimeを除いて、タイプを追加しません。
@arnehormannは、Go database / sqlパッケージgithubでこれについての議論があり、 rsc
は、このサポートを特にgolang mysqlドライバーに追加する必要があると述べました(すべてのデータベースがこれらの大きな値をサポートしているわけではないため)。
ここを参照してください: https :
うん、彼は書いた:
`` `このような大きな値をサポートしていないデータベース(sqliteなど)があります。
これが、database / sqlがデフォルトでこれを許可しない理由です。
既存のすべてのドライバーを壊してしまうため、現時点でその決定を変更することはできません。
MySQLがそのような大きな値をサポートしている場合、MySQLドライバーは
driver.Stmtの実装はdriver.ColumnConverterを実装し、許可します
カスタムValueConverterのuint64s。
つまり、大きなuint64を許可したいMySQLドライバーは、今日そうすることができます。
database / sqlでコードを変更する必要はありません。
`` `
uint64はすぐにオーバーフローする可能性が低いため、これが必要であり、uint64ではなくuint32の場合はさらに重要です。
どうすればそれを実現できますか? このためのプルリクエストの作成を喜んでお手伝いします。
すでにuint64をサポートしています。
すでにuint64をサポートしています。
ただし、NullUint64は使用できません。NullUint64は、BIGINT UNSIGNEDnull許容フィールドに使用する必要があります。
代わりにNullInt64を使用する必要があります。これにより、オーバーフローが発生する可能性があります。
uint64に関するrscのコメントについておっしゃっていたので、rscが提案したようにすでに実装されていると答えました。
uint64の代わりにNullUint64を提案している場合は、rscのコメントに言及せずにそう言ってください。 紛らわしいです。
すでにuint64をサポートしています。
ただし、NullUint64は使用できません。NullUint64は、BIGINT UNSIGNEDnull許容フィールドに使用する必要があります。
代わりにNullInt64を使用する必要があります。これにより、オーバーフローが発生する可能性があります。
そのような問題を解決するパッケージを作成しました
最も参考になるコメント
@arnehormannは、Go database / sqlパッケージgithubでこれについての議論があり、
rsc
は、このサポートを特にgolang mysqlドライバーに追加する必要があると述べました(すべてのデータベースがこれらの大きな値をサポートしているわけではないため)。ここを参照してください: https :