使用Postgres DB的简单rails应用程序,尝试插入2176968859时出现'整数超出范围'错误。应该是对迁移的简单修复,但我不确定。现在我有...Postgres DB上的整数超出范围
create_table :targets do |t|
t.integer :tid
...
end
使用Postgres DB的简单rails应用程序,尝试插入2176968859时出现'整数超出范围'错误。应该是对迁移的简单修复,但我不确定。现在我有...Postgres DB上的整数超出范围
create_table :targets do |t|
t.integer :tid
...
end
问题是什么?你满溢了。如果您需要大数字,请使用bigint。
http://www.postgresql.org/docs/8.3/interactive/datatype-numeric.html
注意在http://www.postgresql.org/docs/8.3/interactive/datatype-numeric.html整数类型允许的值的范围内。我认为你将不得不使用bigint,decimal或double精度。
不错,任何想法如何我可以以编程方式获得整数的最大数量,所以我可以设置为零,如果任何人输入一个巨大的数字?我在rails中使用pg gem。 – ryan2johnson9 2017-10-10 03:07:35
@ ryan2johnson9不是非手,但我敢打赌,一些其他问题会回答这个问题;如果没有,请问一个新的 – ysth 2017-10-10 19:07:09
PostgreSQL整数签名,没有无符号数据类型 - 我敢打赌,这是你的问题。
如果您需要更大的值,请使用bigint。如果bigint还不够,请使用数字 - 但使用bigint而不是数字,除非您需要更大的尺寸或小数,因为它速度更快。
这里的魔法咒语在迁移时声明列:
create_table :example do |t|
t.integer :field, :limit => 8
end
的:极限=> 8在这种情况下,Postgres的不仅签署了4个字节的整数神奇,当你刚刚说的整数。这使用8个字节的有符号整数。
在Rails 4.在迁移文件,你可以定义列:
t.column :foobar, :bigint
正如在以前的答案指出,limit: 8
也能达到同样的事情
感谢nsanders。 'bigint'就是我一直在寻找的东西。对不起,如果我没有把每个人的问题说成这个问题! – Newy 2009-06-16 16:11:23