在数据库中存储年份

met*_*oia 18 database postgresql database-design postgresql-9.1

年度数据的最佳PostgreSQL数据类型是什么,例如2006或1847 TEXT.SMALLINT,DATE?理想情况下,我希望能够使用第二年 - 月 - 日列(DATE格式)查询该列.

mu *_*ort 22

一年是一个整数,甚至以有意义的方式支持整数运算,所以text没有意义.你没有一个月或一天所以date就在窗外.该精细的手工具有这样说smallint:

smallint类型通常仅在磁盘空间非常宝贵时使用.

integer是一个自然的选择.如果您计划将此值与dates 组合timestamps,那么interval可能有意义,因为日期和时间函数和运算符intervals 有很好的理解.

所以这取决于你计划用这个"年"做什么以及它到底是什么.听起来很简单integer是合适的,但你可能不得不将它与你的"第二年 - 月 - 日列"(date可能是一个专栏)结合起来,这取决于他们需要如何协同工作.

  • 就性能而言,这种smallint到int的转换可以忽略不计.但是,如果你看一个非常宽的表,存储节省加上较小的索引可以让选择smallint而不是int.但在任何一种情况下...我认为差异是如此之小,以至于几乎不值得争论...去整数. (6认同)
  • 高级与否...如果你可以使用smallint,为什么要使用整数?Smallint可以表示高达32767的值.换句话说,在这成为一个问题之前,您的系统将有30个千年.和smallint一起去吧. (5认同)
  • @sam:当大多数机器更喜欢在 4 或 8 字节边界上对齐的东西时,使用 2 字节类型可能会产生运行时成本。使用“integer”,除非您有充分的理由担心磁盘上有几个额外的字节。一般来说,您最好选择最适合相关机器的尺寸。 (2认同)