在 MySQL 中处理公元 1000 年之前日期的最佳方法?

Dav*_*uer 9 mysql database-design best-practices timestamp date-format

我正在为公元 1000 年之前扩展的记录创建一个数据库,但 MySQL 日期和日期时间字段仅支持从 1000 开始的日期。

有没有比使用 bigint 类型使用 Unix 时间戳计算 1/1/1970 之前/之后的秒数或切换到支持更大日期范围的数据库软件更方便的方法?

Joe*_*own 8

对于需要非常旧的(对于某些甚至遥远的未来)日期的应用程序,没有原生 RDBMS 日期数据类型可以使用。

如果我是你,我会使用字符串类型作为本机存储并坚持使用重要的格式,例如:+YYYY-MM-DD 以适应 BC/AD 和任何可预见的历史或合理的未来日期。

如果它可能有帮助,您可以构建一个库类,将您的内部存储格式转换为更适合 UI 层的格式。如果您选择的语言支持数据库中的日期,您甚至可以包含转换为本地日期类型的库函数。

  • @Nick,同意 SQL Server 2008+ 中的 DATETIME2(我将错过 1753),但 OP 以 MySQL 作为他在地上的股份开始。此外,一旦您需要将公元前 1 年 12 月 31 日添加到您的日历中,即使 DATETIME2 也会下降:) (2认同)

dab*_*st1 7

另一种方法是将日期的每个部分存储在数字字段中。所以你会有三个字段:

year  SMALLINT     # Store positive values for AD and negative for BC years.
month TINYINT
day   TINYINT
Run Code Online (Sandbox Code Playgroud)

这样它仍然是人类可读的。MySQL 中不同数值数据类型的值范围可在数值类型概述中找到。存储要求可在数据类型存储要求中获得