์ผ๋ฐ MySQL INT ์ ํ์ ๊ธฐ๋ณธ ํค๋ก ์ฌ์ฉํ ๋ ์ฌ์ฉ์๋ ์ผ๋ฐ์ ์ผ๋ก 32b unsigned int ์ธ INT UNSIGNED
์ ํ์ ์์ฑํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ธฐ๋ณธ 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 ์ ๋ฌถ์ฌ ์์ผ๋ฉฐ ๋๋ผ์ด๋ฒ๋ ์ด๋ฌํ ์ ์ฝ ๋ด์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค / sql๊ณผ ํต์ ํ๊ณ ์์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค / SQL์์ ๋๋ฝ ๋ NullTime์ ์ ์ธํ๊ณ ๋ ์ถ๊ฐ ์ ํ์ ์ถ๊ฐํ์ง ์์ต๋๋ค.
@arnehormann Go ๋ฐ์ดํฐ๋ฒ ์ด์ค / sql ํจํค์ง github์์ ์ด์ ๋ํ ๋
ผ์๊ฐ ์์๋๋ฐ, rsc
์์์ด ์ง์์ด golang mysql ๋๋ผ์ด๋ฒ์ ํน๋ณํ ์ถ๊ฐ๋์ด์ผํ๋ค๊ณ ๋งํ์ต๋๋ค (๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ด๋ฌํ ํฐ ๊ฐ์ ์ง์ํ๋ ๊ฒ์ ์๋๊ธฐ ๋๋ฌธ).
์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ญ์์ค : https://github.com/golang/go/issues/9373
๋ค, ๊ทธ๋ ์ผ์ต๋๋ค.
```์ด๋ฌํ ํฐ ๊ฐ์ ์ง์ํ์ง ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค (์ : SQLite)๊ฐ ์์ต๋๋ค.
์ด๊ฒ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค / SQL์ด ๊ธฐ๋ณธ์ ์ผ๋ก์ด๋ฅผ ํ์ฉํ์ง ์๋ ์ด์ ์
๋๋ค.
์ง๊ธ์ ๊ทธ ๊ฒฐ์ ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๊ธฐ์กด์ ๋ชจ๋ ๋์ธ์ ๊นจ๋จ๋ฆด ๊ฒ์ด๊ธฐ ๋๋ฌธ์
๋๋ค.
MySQL์ด ์ด๋ฌํ ํฐ ๊ฐ์ ์ง์ํ๋ ๊ฒฝ์ฐ MySQL ๋๋ผ์ด๋ฒ๋
driver.Stmt ๊ตฌํ driver.ColumnConverter๋ฅผ ๊ตฌํํ๊ณ ํ์ฉ
์ฌ์ฉ์ ์ ์ ValueConverter์ uint64s.
์ฆ, ํฐ uint64๋ฅผ ํ์ฉํ๋ ค๋ MySQL ๋๋ผ์ด๋ฒ๋ ์ค๋๋ ๊ทธ๋ ๊ฒ ํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค / SQL์๋ ์ฝ๋ ๋ณ๊ฒฝ์ด ํ์ํ์ง ์์ต๋๋ค.
```
๋์ํฉ๋๋ค. uint64๊ฐ ๊ณง ์ค๋ฒํ๋ก ๋ ๊ฐ๋ฅ์ฑ์ด ์ ๊ธฐ ๋๋ฌธ์ uint64๋ณด๋ค uint32์ ๋ ์ค์ํฉ๋๋ค.
์ด๋ป๊ฒํด์ผํ ๊น์? ์ด์ ๋ํ ํ ๋ฆฌํ์คํธ ์์ฑ์ ๊ธฐ๊บผ์ด ๋์ ๋๋ฆฌ๊ฒ ์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ด๋ฏธ uint64๋ฅผ ์ง์ํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์ด๋ฏธ uint64๋ฅผ ์ง์ํฉ๋๋ค.
๊ทธ๋ฌ๋ BIGINT UNSIGNED nullable ํ๋์ ์ฌ์ฉํด์ผํ๋ NullUint64๋ ์๋๋๋ค.
์ค๋ฒํ๋ก๋ฅผ ํธ๋ฆฌ๊ฑฐ ํ ์์๋ ๋์ NullInt64๋ฅผ ์ฌ์ฉํด์ผํฉ๋๋ค.
uint64์ ๋ํ rsc์ ์๊ฒฌ์ ์ธ๊ธ ํ์ผ๋ฏ๋ก rsc๊ฐ ์ ์ํ๋๋ก ์ด๋ฏธ ๊ตฌํ๋์๋ค๊ณ ๋๋ตํ์ต๋๋ค.
uint64 ๋์ NullUint64๋ฅผ ์ ์ํ๋ ๊ฒฝ์ฐ rsc์ ์ฃผ์์ ์ธ๊ธํ์ง ์๊ณ ๊ทธ๋ ๊ฒ ๋งํ์ญ์์ค. ํผ๋ ์ค๋ฝ์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ด๋ฏธ uint64๋ฅผ ์ง์ํฉ๋๋ค.
๊ทธ๋ฌ๋ BIGINT UNSIGNED nullable ํ๋์ ์ฌ์ฉํด์ผํ๋ NullUint64๋ ์๋๋๋ค.
์ค๋ฒํ๋ก๋ฅผ ํธ๋ฆฌ๊ฑฐ ํ ์์๋ ๋์ NullInt64๋ฅผ ์ฌ์ฉํด์ผํฉ๋๋ค.
๊ทธ๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ํจํค์ง๋ฅผ ๋ง๋ค์์ต๋๋ค
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@arnehormann Go ๋ฐ์ดํฐ๋ฒ ์ด์ค / sql ํจํค์ง github์์ ์ด์ ๋ํ ๋ ผ์๊ฐ ์์๋๋ฐ,
rsc
์์์ด ์ง์์ด golang mysql ๋๋ผ์ด๋ฒ์ ํน๋ณํ ์ถ๊ฐ๋์ด์ผํ๋ค๊ณ ๋งํ์ต๋๋ค (๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ด๋ฌํ ํฐ ๊ฐ์ ์ง์ํ๋ ๊ฒ์ ์๋๊ธฐ ๋๋ฌธ).์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ญ์์ค : https://github.com/golang/go/issues/9373