You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL日期加减超出支持范围结果不符预期的原因解析

MySQL日期溢出结果不对称的原因解析

MySQL官方文档指出:

MySQL以'YYYY-MM-DD'格式检索和显示DATE值,支持范围为'1000-01-01'至'9999-12-31'。

因此,预期执行以下查询会返回(NULL, NULL):

SELECT DATE_SUB("1000-01-01", INTERVAL 1 DAY),
       DATE_ADD("9999-12-31", INTERVAL 1 DAY);

但实际返回结果为(0999-12-31, NULL),原因如下:

  • 上下限溢出处理逻辑不对称
    MySQL对DATE范围的检查并非完全对称:对上限9999-12-31执行加1天操作时,结果超出文档标注的范围上限,直接返回NULL;但对下限1000-01-01执行减1天操作时,MySQL内部支持处理公元1年至999年的日期,因此会返回有效日期0999-12-31,而非NULL。

  • 文档表述的侧重点
    官方文档标注的1000-01-01至9999-12-31是推荐的常用有效范围,而非技术层面的绝对边界。MySQL底层存储格式实际上支持更早的日期,只是这类日期属于非推荐使用的场景,未在文档中重点说明。

  • 内部存储机制
    DATE类型的底层实现允许存储4位年份(包括前补0的999年),因此0999-12-31是符合格式要求的有效日期值,能够被正常检索和显示。

内容的提问来源于stack exchange,提问作者Westy92

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 21:52:44