这实际上并不是我遇到的问题,但想象某人正在建立一个关于中世纪时期的网站,并希望存储日期,他们将如何进行呢?
MySQL的规范DATE表明它不会低于1000年.这在格式化时是有意义的YYYY-MM-DD.你怎么能存储有关995年苏格兰肯尼思二世死亡的信息?当然你可以将它存储为字符串,但是有真正的日期类型选项吗?
实际上,尽管有文档说明,您也可以在 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 个字段进行操作,而不是对日期进行操作(因此,从某种意义上说,这不能解决您的问题)
| 归档时间: |
|
| 查看次数: |
2192 次 |
| 最近记录: |