零月和零日会导致哪些语句错误?

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:4.0
  • 【问题描述】: 与 MySQL 一样,TiDB 默认启用了 NO_ZERO_DATENO_ZERO_IN_DATE 模式,不建议将这两个模式设为禁用。尽管将这些模式设为禁用时 TiDB 仍可正常使用,但 TiKV coprocessor 会受到影响,具体表现为,执行特定类型的语句,将日期和时间处理函数下推到 TiKV 时可能会导致语句错误。
    描述中没有给出语句错误的例子,目前已知有哪些具体表现?可以给个例子吗?

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

处理比如 2020-06-00 这样的日期 或者 0000-00-00 这样的日期

mysql 里面的 time 相关的库是它自己实现的,可以处理 0 月 0 日这样的东西(结果以 MySQL 觉得正常为准) 而正常的无论是 Go 或者 Rust 的标准库都不会搞 0 月 0 日这样的东西

也就是如果语句中没有使用对应的函数去处理带0日期就不会有问题了对否?那如果group by或者order by 含有这样日期的字段也会有问题吗?

如果被下推到 tikv ,那么也是会有问题的

有没有确切的例子的。。。?

4.0 之前 TiKV 不支持 0 月 0 日,TiDB 写入之后,在 TiKV coprocessor 下处理的时候被报 invalid datetime 报错,类似于这种报错:‘0-0-0 12:30:20.000000000’ is not a valid datetime in specified time zone

具体的复现步骤,这边比较难提供

这么说4.0开始支持了吧?我这边正常的插入和查询貌似是正常的,但是目前还没有复现出会出问题的场景?

嗯。4.0 之后 TiKV 开始支持 0 月 0 日