Skip to content

为什么ID使用Int而不是unsigned int

最近公司把某些业务实体的ID从int32迁移到了int64。这些ID的合法数据都是大于1的,为什么不选择unsigned int64 而要选择 int64 呢? unsigned 类型相对来说可用的合法id可是大了一倍呀。

有两个原因:

1, 对齐数据类型,避免溢出或其他兼容性问题

某些数据存储,如postgress是不支持unsigned integer 类型的。比如postgresSql

PostgresSQL TypeGo Type
smallint, smallserialint16(-32768 ~ 32767)
int, serialint32 (-2147483648 ~ 2147483647)
bigint, bigserialint64 (-9223372036854775808 to 9223372036854775807)

2,Go database/sql 包并不支持任何超过9223372036854775807的数值。

9223372036854775807 也就是int64的最大值。如果使用uint64,那么在存储到数据库时候就可能因为数据过大,发生错误。

Published in未分类系统设计

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *