如何在数据库中存储非常旧的日期?

Ger*_*obs 16 mysql datetime

这实际上并不是我遇到的问题,但想象某人正在建立一个关于中世纪时期的网站,并希望存储日期,他们将如何进行呢?

MySQL的规范DATE表明它不会低于1000年.这在格式化时是有意义的YYYY-MM-DD.你怎么能存储有关995年苏格兰肯尼思二世死亡的信息?当然你可以将它存储为字符串,但是有真正的日期类型选项吗?

Alm*_* Do 4

实际上,尽管有文档说明,您也可以在 MySQL 中存储 1000 年以下的日期:

mysql> 描述测试;
+--------+---------+------+-----+---------+--------+
| 领域 | 类型 | 空 | 关键| 默认 | 额外 |
+--------+---------+------+-----+---------+--------+
| 编号 | 整数(11)| 是的 | | 空| |
| 出生| 日期 | 是的 | | 空| |
+--------+---------+------+-----+---------+--------+

-您仍然需要以 YYYY 格式输入年份:

mysql> 插入测试值(1, '0995-03-05');
查询正常,1 行受影响(0.02 秒)

mysql> 从测试中选择*;
+------+------------+
| 编号 | 出生|
+------+------------+
| 1 | 0995-03-05 |
+------+------------+
一组 1 行(0.00 秒)

-您将能够将此作为日期进行操作:

mysql> 选择出生 + 测试间隔 5 天;                                                                              
+------------------------------------+                                                                                                   
| 出生+间隔5天|                                                                                                   
+------------------------------------+                                                                                                   
| 0995-03-10 |
+------------------------------------+
一组 1 行(0.03 秒)

至于安全。我从来没有遇到过这种情况在 MySQL 5.x 中不起作用(当然,这并不意味着它 100% 有效,但至少它在一定概率上是可靠的)

关于公元前日期(基督以下)。我认为这很简单 - 在 MySQL 中也没有办法存储负日期。即,您需要将年份单独存储为有符号整数字段:

mysql> select '0001-05-04' - 间隔 1 年,如上面_bc,'0001-05-04' - 间隔 2 年,如下面_bc;
+------------+----------+
| 上面_bc | 下面_bc |
+------------+----------+
| 0000-05-04 | 空|
+------------+----------+
1 行一组,1 次警告(0.00 秒)

mysql> 显示警告;
+---------+------+-------------------------------- ------------+
| 水平| 代码| 留言 |
+---------+------+-------------------------------- ------------+
| 警告| 1441 | 1441 日期时间函数:日期时间字段溢出 |
+---------+------+-------------------------------- ------------+
一组 1 行(0.00 秒)

但我认为,在任何情况下(0 年以下/以上),在这种情况下最好将日期部分存储为整数 - 这不会依赖于未记录的功能。但是,您需要对这 3 个字段进行操作,而不是对日期进行操作(因此,从某种意义上说,这不能解决您的问题)

  • 你让我笑了:) 0 年之前的年份是“基督[诞生]之前”,而不是“圣诞节之后”。相反的(年 > 0)是“AD”,意思是“anno domini”,翻译过来就是“主的年份”。 (2认同)