使用数据类型为10-20位数值 - PostgreSQL

时间:2012-03-12 20:26:29

标签: database postgresql sqldatatypes digit

我目前正在开发一个需要将10到20位数值存储到数据库中的应用程序。

我的问题是,我应该使用什么数据类型?该数字用作主键,因此DB的性能对我的应用非常重要。在Java中,我使用这个数字和BigDecimal。

2 个答案:

答案 0 :(得分:3)

手册中的引用:

  

数字:小数点前最多131072位;小数点后最多16383位数

http://www.postgresql.org/docs/current/static/datatype-numeric.html

据我所知,131072位数应该可以满足您的需求。

修改
回答有关效率的问题:

第一个也是最重要的问题是:该列中存储了哪种数据以及如何使用它?

  • 如果它是一个数字,那么使用数字。
  • 如果不是号码,请使用varchar。

永远不要在字符列中存储(真实)数字!

如果您需要按该列排序,那么如果您使用字符数据类型(例如2将在10之后排序)

,您将不会对所获得的内容感到满意

回到效率问题。我认为这主要是你担心的空间效率。您可以自己计算值的空间要求。

还记录了数值数据类型的存储要求:

  

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

因此对于20位数字,这将是最多10个字节加上5到8个字节的开销。所以最大18个字节。

要在varchar列中存储20位数字,您需要21个字节。

所以从一个空间"效率"观点数字稍微好一些。但这绝不会影响您的决定,因为数据类型的选择应该由列内容的要求驱动。

从表现的角度来看,我不认为会有很大的不同。

答案 1 :(得分:1)

尝试BIGINT而不是NUMERIC。它应该可以工作。

http://www.postgresql.org/docs/current/static/datatype-numeric.html