我正在为公元 1000 年之前的记录创建数据库,但 MySQL 日期和日期时间字段仅支持从 1000 年开始的日期。
有没有比使用 Unix 时间戳使用 bigint 类型来计算 1/1/1970 之前/之后的秒数或切换到支持更大日期范围的数据库软件更方便的方法?
我正在为公元 1000 年之前的记录创建数据库,但 MySQL 日期和日期时间字段仅支持从 1000 年开始的日期。
有没有比使用 Unix 时间戳使用 bigint 类型来计算 1/1/1970 之前/之后的秒数或切换到支持更大日期范围的数据库软件更方便的方法?
对于需要非常旧(以及某些甚至遥远的未来)日期的应用程序,没有原生 RDBMS 日期数据类型。
如果我是你,我会为本地存储使用字符串类型,并坚持使用具有位置意义的格式,例如:+YYYY-MM-DD 以适应 BC/AD 和任何可预见的历史或合理的未来日期。
如果它可能有帮助,您可以构建一个库类,将您的内部存储格式转换为 UI 层更美观的格式。如果您选择的语言支持数据库中的日期,您甚至可以包含转换为本机日期类型的库函数。
另一种方法是将日期的每个部分存储在数字字段中。因此,您将拥有三个字段:
这样它仍然是人类可读的。MySQL 中不同数字数据类型的值范围可在Overview of Numeric Types中找到。存储要求可在数据类型存储要求中找到。
在我们以数字格式存储日期的表中有一个浮点字段怎么样,例如 2015-10-12 10:12:05 将存储 20151012. 101205. 对单个字段进行排序而不是拥有 3 个或更多字段总是更好不同的领域。
上述逻辑不适用于少数情况。因此,考虑到 1 天 = 86400 秒,我们将日期转换为秒。对 BC 日期使用负数。它按预期工作。