我目前正在开发一个需要将10到20位数值存储到数据库中的应用程序。
我的问题是,我应该使用什么数据类型?该数字用作主键,因此DB的性能对我的应用非常重要。在Java中,我使用这个数字和BigDecimal。
答案 0 :(得分:3)
手册中的引用:
数字:小数点前最多131072位;小数点后最多16383位数
http://www.postgresql.org/docs/current/static/datatype-numeric.html
据我所知,131072位数应该可以满足您的需求。
修改强>
回答有关效率的问题:
第一个也是最重要的问题是:该列中存储了哪种数据以及如何使用它?
永远不要在字符列中存储(真实)数字!
如果您需要按该列排序,那么如果您使用字符数据类型(例如2
将在10
之后排序)
回到效率问题。我认为这主要是你担心的空间效率。您可以自己计算值的空间要求。
还记录了数值数据类型的存储要求:
实际存储要求是每组四个十进制数字的两个字节,加上五到八个字节的开销
因此对于20位数字,这将是最多10个字节加上5到8个字节的开销。所以最大18个字节。
要在varchar列中存储20位数字,您需要21个字节。
所以从一个空间"效率"观点数字稍微好一些。但这绝不会影响您的决定,因为数据类型的选择应该由列内容的要求驱动。
从表现的角度来看,我不认为会有很大的不同。
答案 1 :(得分:1)
尝试BIGINT而不是NUMERIC。它应该可以工作。
http://www.postgresql.org/docs/current/static/datatype-numeric.html