最近公司把某些业务实体的ID从int32迁移到了int64。这些ID的合法数据都是大于1的,为什么不选择unsigned int64
而要选择 int64
呢? unsigned 类型相对来说可用的合法id可是大了一倍呀。
有两个原因:
1, 对齐数据类型,避免溢出或其他兼容性问题
某些数据存储,如postgress是不支持unsigned integer 类型的。比如postgresSql
。
PostgresSQL Type | Go Type |
smallint, smallserial | int16(-32768 ~ 32767) |
int, serial | int32 (-2147483648 ~ 2147483647) |
bigint, bigserial | int64 (-9223372036854775808 to 9223372036854775807) |
2,Go database/sql
包并不支持任何超过9223372036854775807的数值。
9223372036854775807 也就是int64的最大值。如果使用uint64,那么在存储到数据库时候就可能因为数据过大,发生错误。
Be First to Comment