Ruby on rails 更好的数据类型来存储长ID

Ruby on rails 更好的数据类型来存储长ID,ruby-on-rails,postgresql,types,numeric,Ruby On Rails,Postgresql,Types,Numeric,我正在使用Rails进行一个项目。在这个应用程序中,我们使用OAuth来启用Facebook和Google注册/登录。我想将各种提供者(FB或Google)和与这些提供者相关联的用户ID存储在与用户相关的单独表/模型中 我的问题是下一个,FB和谷歌提供的用户ID都是很长的数字(谷歌的是21位)。将其存储为整数或更好地存储为字符串有意义吗?这两种选择的优缺点是什么 我使用的是Postgres 10.14。在Postgres整数列中不能存储那么多数字bigint允许最多19位数字(922337203

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

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


我使用的是Postgres 10.14。

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

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

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

存储为
数值的21位十进制数字将占用RAM中的18个字节和磁盘上的15个字节。见:


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

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

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

存储为
数值的21位十进制数字将占用RAM中的18个字节和磁盘上的15个字节。见:


这将在很大程度上结束一个观点,因为我的观点将它们存储为字符串。你的价值观来自一个你无法控制的外部来源,我建议你不要用它们计算任何东西。您能确保您永远不会允许另一个源使用字母数字方案吗。@Belayer:假设数字都是数字(可能是根据这个假设编码的),我不希望其他字符偷偷地进入,所以没有字符串类型。如果发生这种情况,我希望立即收到错误消息。第一个问题:假设所有数字都是合理的吗?@ErwinBrandstetter:这就是为什么我说它最终将主要是观点。我同意,我不想让角色值潜入,但如果没有控制,我无法阻止角色被故意放在那里。至于你的第一个问题-不,但是从2的宇宙来看,假设它必须是所有数字也是不合理的。所以我的第一个问题略有不同:假设它们都是数字是否合理。如果我想验证来自多个外部实体的数据,而我无法指定数据格式,那么我需要为每个实体使用不同的验证例程。这将在很大程度上形成一个意见,因为我的意见将它们存储为字符串。你的价值观来自一个你无法控制的外部来源,我建议你不要用它们计算任何东西。您能确保您永远不会允许另一个源使用字母数字方案吗。@Belayer:假设数字都是数字(可能是根据这个假设编码的),我不希望其他字符偷偷地进入,所以没有字符串类型。如果发生这种情况,我希望立即收到错误消息。第一个问题:假设所有数字都是合理的吗?@ErwinBrandstetter:这就是为什么我说它最终将主要是观点。我同意,我不想让角色值潜入,但如果没有控制,我无法阻止角色被故意放在那里。至于你的第一个问题-不,但是从2的宇宙来看,假设它必须是所有数字也是不合理的。所以我的第一个问题略有不同:假设它们都是数字是否合理。如果我想验证来自多个外部实体的数据,而我无法指定数据格式,那么我需要为每个实体使用不同的验证例程。