首页 > 解决方案 > 更好的数据类型来存储长 ID

问题描述

我正在使用 Rails 开发一个项目。在这个应用程序中,我们使用 OAuth 来启用 Facebook 和 Google 注册/登录。我想将各种提供者(FB 或 Google)以及与这些提供者关联的用户 ID 存储在与用户相关的单独表/模型中。

我的问题是下一个问题,FB 和 Google 提供的用户 ID 是很长的数字(Google 是 21 位数字)。将其存储为整数或更好地将其存储为字符串是否有意义?这两种选择的优缺点是什么?

我正在使用 Postgres 10.14。

标签: ruby-on-railspostgresqltypesnumeric

解决方案


您不能在 Postgres 整数列中存储那么多数字。bigint最多允许 19 位数字(9223372036854775801 是最大的正数:)2^63-1

虽然数字都是数字,但最有效、最准确的数据类型是numeric. 手册:

实际的存储要求是每组四个十进制数字需要两个字节,加上三到八个字节的开销。

存储的 21 个十进制数字numeric将占用 RAM 中的 18 个字节和磁盘中的 15 个字节。看:


推荐阅读