存储OAuth提供商返回的用户唯一ID应使用什么SQL数据类型
关于OAuth用户唯一ID存储长度的回答
主流服务商的用户ID长度实测
- Google OAuth返回的
sub字段(用户唯一ID)通常为21位左右的字符串,远低于128位上限 - Facebook用户ID为纯数字字符串,现有最长长度不超过30位
- GitHub OAuth返回的用户ID为数值类型,转为字符串后长度不超过15位
- 其余主流服务商如Twitter/X、LinkedIn、Apple的用户ID长度也都控制在64位以内
可能超出128位长度的场景
确实存在部分场景下用户ID长度会超过128位:
- 部分企业级自研OAuth/SSO服务,会将租户标识、用户身份类型、域名等信息拼接进用户唯一ID,实测最高见过200位以上的返回值
- 部分小众区域性身份提供商,或支持自定义sub规则的OIDC服务,会采用带前缀的UUID、加密字符串作为用户唯一ID,极端情况下长度会超出128位
- 如果你的业务需要兼容SAML协议转换而来的OAuth身份断言,用户唯一ID可能携带额外的身份源标识,也可能超出长度限制
存储建议
- 如果你的业务仅需要兼容Google、Facebook、GitHub这三家主流服务商,
varchar(128)完全可以满足需求,不会出现溢出问题 - 如果后续有扩展更多身份源的计划,建议直接使用
varchar(255)作为字段类型:该长度是绝大多数SQL数据库对varchar类型的存储优化临界值,不会比varchar(128)额外占用更多存储空间,同时可以覆盖99%以上的业务场景 - 仅当你确定需要兼容任意自定义身份源时,才考虑使用
text类型,该类型没有长度上限,但查询性能会略低于varchar类型
内容的提问来源于stack exchange,提问作者joel coutinho
相关产品推荐
相关产品推荐

