SQL DataType - 如何存储一年?

pet*_*ter 39 database types sqldatatypes

我需要在数据库中插入一年(例如:1988年,1990年等).当我使用Date或Datetime数据类型时,它显示错误.我应该使用哪种数据类型.

KM.*_*KM. 38

常规的4字节INT是大的方式,是浪费空间!

您没有说出您正在使用的数据库,因此我不建议使用特定的数据类型.每个人都说"使用整数",但大多数数据库存储4个字节的整数,这比你需要的多.您应该使用两个字节的整数(SQL Server上的smallint),这将更好地节省空间.

  • @Ender,你并没有真正用这些值做数学,它更多的是一个存储和查找过程。如果它们更小,您将能够在内存中存储更多值,如果它们更小,您将能够从磁盘读取更多值,等等。我找不到任何支持您的想法的文章。http://dba.stackexchange.com/q/4968 (5认同)
  • @Weapon X,**为什么用4个字节来存储一年?**char(4)使用4个字节.我的回答建议使用两个字节的int,这是SQL Server上的一个`smallint`,可以存储范围内的值:-32,768到32,767,这足以存储一年.您希望尽可能少地使用空间,因为您可以每页修复更多数据,和/或内存中的更多数据和/或内存中的更多索引等.**如果我使用smallint并使用char(4),您将使用两倍的空间/内存来存储相同的数据.数据库处理你的`CHAR(4)`而不是我的`SMALLINT`需要更长的时间和更多的努力** (4认同)
  • 通常,使用int浪费空间比使用较小的数据类型更可取,因为大多数现代处理器比较小的数据类型更有效地处理4个字节的int(32位)。 (2认同)
  • @ender,总会有取舍,我会优化IO(以及较小的数据类型),因为IO通常是主要瓶颈。 (2认同)

The*_*TXI 29

如果您需要在数据库中存储一年,您可能要使用Integer数据类型(如果您只设置存储年份)或DateTime数据类型(这将涉及存储基本上为1/1 /的日期) 1990 00:00:00格式).

  • **不要懒惰并"只使用int".**正确调整数据类型,两个字节的int是更好的选择.通过以4个字节存储4位数年份,您浪费的资源不仅仅是磁盘空间.通过使用两倍的高速缓存,为此列推送两倍的IO数据等,您的系统将永远负担.这是一个没有道理的,请参阅:http://dba.stackexchange.com/q/4968 (13认同)
  • bb-但是32768年的问题呢?(j / k) (2认同)
  • @KM。我已经说过,“我同意这是一个应该完成的简单优化”,所以我真的不知道你在争论什么。我碰巧在较小的临时系统上工作,这些系统永远不会从这种变化中看到任何好处。我也有类似系统 10 年的历史。我们构建的内容是为临时使用(最多 6 个月)而设计的,即使在最坏/最好的情况下,即数据库不断增长,也需要(至少)再过 10 年的时间,这样的优化才会产生任何效果。对我们来说有明显的差异。 (2认同)

小智 12

嘿,你可以在MySQL中使用year()数据类型它有两位数或四位数格式.

注意:允许的值为四位数格式:1901至2155.允许的值为两位数格式:70到69,表示从1970年到2069年的年份