在Rails和PostgreSQL中用于Facebook用户ID的数据类型

che*_*ell 2 postgresql types facebook ruby-on-rails

我有一个用于Rails应用程序的PostgreSQL数据库.

我想存储Facebook用户ID所以我认为我可以使用整数,但它不够大所以我选择了浮点数.

但是现在Rails将.0添加到我的用户ID的末尾

我可以使用什么数据类型,因此对于非常长的Facebook用户ID不会发生这种情况 example: 100002496803785

mu *_*ort 7

您可以:limit => 8在整数列上使用来获取bigint.例如:

class Pancakes < ActiveRecord::Migration
    def change
        create_table :pancakes do |t|
            t.integer :c, :limit => 8
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

然后,来自psql:

=> \d pancakes
                         Table "public.pancakes"
 Column |  Type   |                       Modifiers                       
--------+---------+-------------------------------------------------------
 id     | integer | not null default nextval('pancakes_id_seq'::regclass)
 c      | bigint  | not null
Indexes:
    "pancakes_pkey" PRIMARY KEY, btree (id)
Run Code Online (Sandbox Code Playgroud)

这是你的八字节bigint列.

您还可以使用字符串作为Facebook ID.你没有对ID进行任何算术运算,所以它们实际上只是看起来像大整数的不透明的包,字符串会排序和比较,所以它们可能是最好的选择.由于字符串的大小超过整数,会有一些存储和访问开销,但它可能不足以产生任何明显的差异.

永远不要double用于需要精确的东西..0在这种情况下,你可能会很好(除了尾随),因为你有52位的尾数,这意味着它double会像52位整数一样,直到你的值足够大以至于需要指数.即便如此,使用double这个将是一个糟糕的想法和滥用类型系统.