我需要在数据库中插入一年(例如:1988 ,1990 等)。当我使用 Date 或 Datetime 数据类型时,它显示错误。我应该使用哪种数据类型。
9 回答
常规的 4 字节 INT 太大了,浪费空间!
你没有说你正在使用什么数据库,所以我不能推荐一个特定的数据类型。每个人都在说“使用整数”,但大多数数据库以 4 个字节存储整数,这远远超出了您的需要。您应该使用两字节整数(SQL Server 上的 smallint),这样可以更好地节省空间。
如果您需要在数据库中存储一年,您可能想要使用 Integer 数据类型(如果您只存储年份)或 DateTime 数据类型(这将涉及存储基本上是 1/1/ 的日期1990 00:00:00 格式)。
嘿,你可以在 MySQL 中使用year()数据类型,它有两位数或四位数的格式。
注:四位数格式允许的值:1901 到 2155。两位数格式允许的值:70 到 69,代表 1970 到 2069 年
理想情况下,在 MSSQL 中存储“年份”取决于您使用它做什么以及该“年份”对您的应用程序和数据库的含义。话虽如此,这里有几件事要说明。MSSQL 中截至 2012 年的年份没有“数据类型”。我倾向于使用 SMALLINT,因为它只有 2 个字节(节省了 INT 要求的 4 个字节中的 2 个)。您的限制是您的年份不能超过 32767(从 SQL Server 2008R2 开始)。我真的不认为 SQL 会成为一万年后的首选数据库,更不用说 32767 年了。您可以将 INT 视为 MSSQL 中的 Year() 函数将数据类型“DATE”转换为 INT。就像我说的,这取决于您从哪里获取数据以及数据的去向,但是 SMALLINT 应该没问题。INT将是矫枉过正... 除非您有其他原因,例如我上面提到的原因,或者代码要求需要 INT 形式(例如与现有应用程序集成)。很可能 SMALLINT 应该没问题。
仅仅一年,没有别的吗?为什么不使用简单的整数?
如果您只需要存储年份,请使用整数。如果您认为在查询此列时会有基于日期的计算,您也可以使用 datetime
存储可能只是问题的一部分。这个值将如何在查询中使用?
是要与其他日期时间数据类型进行比较,还是所有关联的行也有数值?
您将如何处理需求的变化?您对用更短时间片替换年份的请求的反应有多容易?即现在他们想要按季度分解?
数字类型可以很容易地在日期时间查询中使用,方法是使用一个查找表来连接,其中包含开始和停止日期(1/1/X 到 12/31/x)等内容。
我不认为使用整数或整数的任何子类型是一个不错的选择。迟早您将不得不对其进行其他日期操作。同样在 2019 年,我们不必太担心空间问题。看看那些节省的 2 个字节在 2000 年花费了我们什么。
我建议使用年份 + 0101 转换为真实日期的日期。同样,如果您需要将一年中的一个月存储年 + 月 + 01 作为真实日期。
如果你这样做了,你以后就可以在上面正确地做“约会的东西”
您试图在数据库中插入一年,然后使用:
type YEAR